"""
@demo出品 仅供学习交流，请在下载后的24小时内完全删除 请勿将任何内容用于商业或非法目的，否则后果自负。
const $ = new Env("铁路");
export tielu=日期,始发站,到达站,大于小于,出发时间,票数,cookie
export tielu=2023-10-01,杭州东,长沙南,<,13:47,6,_uab_collina=169500447645291975459865; t.....
cron：52 0,6-22/2 * * *
"""
import os
import time
import requests
from colorama import Fore
from prettytable import PrettyTable
from notify import send
PASSENGER_TYPE_ADULT = "ADULT"
# 刷票间隔(单位:s)
QUERY_TICKET_REFERSH_INTERVAL = 10
CITY_NAME = [
    "北京北",
    "北京东",
    "北京",
    "北京南",
    "北京西",
    "广州南",
    "重庆北",
    "重庆",
    "重庆南",
    "广州东",
    "上海",
    "上海南",
    "上海虹桥",
    "上海西",
    "天津北",
    "天津",
    "天津南",
    "天津西",
    "长春",
    "长春南",
    "长春西",
    "成都东",
    "成都南",
    "成都",
    "长沙",
    "长沙南",
    "福州",
    "福州南",
    "贵阳",
    "广州",
    "广州西",
    "哈尔滨",
    "哈尔滨东",
    "哈尔滨西",
    "合肥",
    "合肥西",
    "呼和浩特东",
    "呼和浩特",
    "口东",
    "海口东",
    "海口",
    "杭州东",
    "杭州",
    "杭州南",
    "济南",
    "济南东",
    "济南西",
    "昆明",
    "昆明西",
    "拉萨",
    "兰州东",
    "兰州",
    "兰州西",
    "南昌",
    "南京",
    "南京南",
    "南宁",
    "石家庄北",
    "石家庄",
    "沈阳",
    "沈阳北",
    "沈阳东",
    "太原北",
    "太原东",
    "太原",
    "武汉",
    "王家营西",
    "乌鲁木齐南",
    "西安北",
    "西安",
    "西安南",
    "西宁",
    "银川",
    "郑州",
    "阿尔山",
    "安康",
    "阿克苏",
    "阿里河",
    "阿拉山口",
    "安平",
    "安庆",
    "安顺",
    "鞍山",
    "安阳",
    "北安",
    "蚌埠",
    "白城",
    "北海",
    "白河",
    "白涧",
    "宝鸡",
    "滨江",
    "博克图",
    "百色",
    "白山市",
    "北台",
    "包头东",
    "包头",
    "北屯市",
    "本溪",
    "白云鄂博",
    "白银西",
    "亳州",
    "赤壁",
    "常德",
    "承德",
    "长甸",
    "赤峰",
    "茶陵",
    "苍南",
    "昌平",
    "崇仁",
    "昌图",
    "长汀镇",
    "曹县",
    "楚雄南",
    "陈相屯",
    "长治北",
    "池州",
    "长征",
    "常州",
    "郴州",
    "长治",
    "沧州",
    "崇左",
    "大安北",
    "大成",
    "丹东",
    "东方红",
    "东莞东",
    "大虎山",
    "敦煌",
    "敦化",
    "德惠",
    "东京城",
    "大涧",
    "都江堰",
    "大连北",
    "大理",
    "大连",
    "定南",
    "大庆",
    "东胜",
    "大石桥",
    "大同",
    "东营",
    "大杨树",
    "都匀",
    "邓州",
    "达州",
    "德州",
    "额济纳",
    "二连",
    "恩施",
    "福鼎",
    "凤凰机场",
    "风陵渡",
    "涪陵",
    "富拉尔基",
    "抚顺北",
    "佛山",
    "阜新南",
    "阜阳",
    "格尔木",
    "广汉",
    "古交",
    "桂林北",
    "古莲",
    "桂林",
    "固始",
    "广水",
    "干塘",
    "广元",
    "广州北",
    "赣州",
    "公主岭",
    "公主岭南",
    "淮安",
    "淮北",
    "鹤北",
    "淮滨",
    "河边",
    "潢川",
    "韩城",
    "邯郸",
    "横道河子",
    "鹤岗",
    "皇姑屯",
    "红果",
    "黑河",
    "怀化",
    "汉口",
    "葫芦岛",
    "海拉尔",
    "霍林郭勒",
    "海伦",
    "侯马",
    "哈密",
    "淮南",
    "桦南",
    "海宁西",
    "鹤庆",
    "怀柔北",
    "怀柔",
    "黄石东",
    "华山",
    "黄山",
    "黄石",
    "衡水",
    "衡阳",
    "菏泽",
    "贺州",
    "汉中",
    "惠州",
    "吉安",
    "集安",
    "江边村",
    "晋城",
    "金城江",
    "景德镇",
    "嘉峰",
    "加格达奇",
    "井冈山",
    "蛟河",
    "金华南",
    "金华",
    "九江",
    "吉林",
    "荆门",
    "佳木斯",
    "济宁",
    "集宁南",
    "酒泉",
    "江山",
    "吉首",
    "九台",
    "镜铁山",
    "鸡西",
    "绩溪县",
    "嘉峪关",
    "江油",
    "锦州",
    "金州",
    "蓟州",
    "库尔勒",
    "开封",
    "岢岚",
    "凯里",
    "喀什",
    "昆山南",
    "奎屯",
    "开原",
    "六安",
    "灵宝",
    "芦潮港",
    "隆昌",
    "陆川",
    "利川",
    "临川",
    "潞城",
    "鹿道",
    "娄底",
    "临汾",
    "良各庄",
    "临河",
    "漯河",
    "绿化",
    "隆化",
    "丽江",
    "临江",
    "龙井",
    "吕梁",
    "醴陵",
    "柳林南",
    "滦平",
    "六盘水",
    "灵丘",
    "旅顺",
    "兰溪",
    "陇西",
    "澧县",
    "临西",
    "龙岩",
    "耒阳",
    "洛阳",
    "连云港东",
    "洛阳东",
    "临沂",
    "洛阳龙门",
    "柳园",
    "凌源",
    "辽源",
    "立志",
    "柳州",
    "辽中",
    "麻城",
    "免渡河",
    "牡丹江",
    "莫尔道嘎",
    "明光",
    "满归",
    "漠河",
    "茂名",
    "茂名西",
    "密山",
    "马三家",
    "麻尾",
    "绵阳",
    "梅州",
    "满洲里",
    "宁波东",
    "宁波",
    "南岔",
    "南充",
    "南丹",
    "南大庙",
    "南芬",
    "讷河",
    "嫩江",
    "内江",
    "南平",
    "南通",
    "南阳",
    "碾子山",
    "平顶山",
    "盘锦",
    "平凉",
    "平凉南",
    "平泉",
    "坪石",
    "萍乡",
    "凭祥",
    "郫县西",
    "攀枝花",
    "蕲春",
    "青城山",
    "青岛",
    "清河城",
    "曲靖",
    "黔江",
    "前进镇",
    "齐齐哈尔",
    "七台河",
    "沁县",
    "泉州东",
    "泉州",
    "衢州",
    "融安",
    "汝箕沟",
    "瑞金",
    "日照",
    "双城堡",
    "绥芬河",
    "韶关东",
    "山海关",
    "绥化",
    "三间房",
    "苏家屯",
    "舒兰",
    "三明",
    "神木",
    "三门峡",
    "商南",
    "遂宁",
    "四平",
    "商丘",
    "上饶",
    "韶山",
    "宿松",
    "汕头",
    "邵武",
    "涉县",
    "三亚",
    "亚",
    "邵阳",
    "十堰",
    "双鸭山",
    "松原",
    "苏州",
    "深圳",
    "宿州",
    "随州",
    "朔州",
    "深圳西",
    "塘豹",
    "塔尔气",
    "潼关",
    "塘沽",
    "塔河",
    "通化",
    "泰来",
    "吐鲁番",
    "通辽",
    "铁岭",
    "陶赖昭",
    "图们",
    "铜仁",
    "唐山北",
    "田师府",
    "泰山",
    "唐山",
    "天水",
    "通远堡",
    "太阳升",
    "泰州",
    "桐梓",
    "通州西",
    "五常",
    "武昌",
    "瓦房店",
    "威海",
    "芜湖",
    "乌海西",
    "吴家屯",
    "武隆",
    "乌兰浩特",
    "渭南",
    "威舍",
    "歪头山",
    "武威",
    "武威南",
    "无锡",
    "乌西",
    "乌伊岭",
    "武夷山",
    "万源",
    "万州",
    "梧州",
    "温州",
    "温州南",
    "西昌",
    "许昌",
    "西昌南",
    "香坊",
    "轩岗",
    "兴国",
    "宣汉",
    "新会",
    "新晃",
    "锡林浩特",
    "兴隆县",
    "厦门北",
    "厦门",
    "厦门高崎",
    "小市",
    "秀山",
    "向塘",
    "宣威",
    "新乡",
    "信阳",
    "咸阳",
    "襄阳",
    "熊岳城",
    "新沂",
    "兴义",
    "新余",
    "徐州",
    "延安",
    "宜宾",
    "亚布力南",
    "叶柏寿",
    "宜昌东",
    "永川",
    "盐城",
    "宜昌",
    "运城",
    "伊春",
    "榆次",
    "杨村",
    "宜春西",
    "伊尔施",
    "燕岗",
    "永济",
    "延吉",
    "营口",
    "牙克石",
    "阎良",
    "玉林",
    "榆林",
    "亚龙湾",
    "一面坡",
    "伊宁",
    "阳平关",
    "玉屏",
    "原平",
    "延庆",
    "阳泉曲",
    "玉泉",
    "阳泉",
    "营山",
    "玉山",
    "燕山",
    "榆树",
    "鹰潭",
    "烟台",
    "伊图里河",
    "玉田县",
    "义乌",
    "阳新",
    "义县",
    "益阳",
    "岳阳",
    "崖州",
    "永州",
    "扬州",
    "淄博",
    "镇城底",
    "自贡",
    "珠海",
    "珠海北",
    "湛江",
    "镇江",
    "张家界",
    "张家口",
    "张家口南",
    "周口",
    "哲里木",
    "扎兰屯",
    "驻马店",
    "肇庆",
    "周水子",
    "昭通",
    "中卫",
    "资阳",
    "遵义西",
    "枣庄",
    "资中",
    "株洲",
    "枣庄西",
    "昂昂溪",
    "阿城",
    "安达",
    "安德",
    "安定",
    "安多",
    "安广",
    "敖汉",
    "艾河",
    "安化",
    "艾家村",
    "鳌江",
    "安家",
    "阿金",
    "安靖",
    "阿克陶",
    "安口窑",
    "敖力布告",
    "安龙",
    "阿龙山",
    "安陆",
    "阿木尔",
    "阿南庄",
    "安庆西",
    "鞍山西",
    "安塘",
    "安亭北",
    "阿图什",
    "安图",
    "安溪",
    "博鳌",
    "北碚",
    "白壁关",
    "蚌埠南",
    "巴楚",
    "板城",
    "北戴河",
    "保定",
    "宝坻",
    "八达岭",
    "巴东",
    "柏果",
    "布海",
    "白河东",
    "贲红",
    "宝华山",
    "白河县",
    "白芨沟",
    "碧鸡关",
    "北滘",
    "碧江",
    "白鸡坡",
    "笔架山",
    "八角台",
    "保康",
    "白奎堡",
    "白狼",
    "百浪",
    "博乐",
    "宝拉格",
    "巴林",
    "宝林",
    "北流",
    "勃利",
    "布列开",
    "宝龙山",
    "百里峡",
    "八面城",
    "班猫箐",
    "八面通",
    "北马圈子",
    "北票南",
    "白旗",
    "宝泉岭",
    "白泉",
    "巴山",
    "白水江",
    "白沙坡",
    "白石山",
    "白水镇",
    "东",
    "坂田",
    "泊头",
    "北屯",
    "本溪湖",
    "博兴",
    "八仙筒",
    "白音察干",
    "背荫河",
    "北营",
    "巴彦高勒",
    "白音他拉",
    "鲅鱼圈",
    "白银市",
    "白音胡硕",
    "巴中",
    "霸州",
    "北宅",
    "赤壁北",
    "查布嘎",
    "长城",
    "长冲",
    "承德东",
    "赤峰西",
    "嵯岗",
    "柴岗",
    "长葛",
    "柴沟堡",
    "城固",
    "陈官营",
    "成高子",
    "草海",
    "柴河",
    "册亨",
    "草河口",
    "崔黄口",
    "巢湖",
    "蔡家沟",
    "成吉思汗",
    "岔江",
    "蔡家坡",
    "昌乐",
    "超梁沟",
    "慈利",
    "昌黎",
    "长岭子",
    "晨明",
    "长农",
    "昌平北",
    "常平",
    "长坡岭",
    "辰清",
    "蔡山",
    "楚山",
    "长寿",
    "磁山",
    "苍石",
    "草市",
    "察素齐",
    "长山屯",
    "长汀",
    "昌图西",
    "春湾",
    "磁县",
    "岑溪",
    "辰溪",
    "磁西",
    "长兴南",
    "磁窑",
    "春阳",
    "城阳",
    "创业村",
    "朝阳川",
    "朝阳地",
    "朝阳南",
    "长垣",
    "朝阳镇",
    "滁州北",
    "常州北",
    "滁州",
    "潮州",
    "常庄",
    "曹子里",
    "车转湾",
    "郴州西",
    "沧州西",
    "德安",
    "大安",
    "大坝",
    "大板",
    "大巴",
    "到保",
    "定边",
    "东边井",
    "德伯斯",
    "打柴沟",
    "德昌",
    "滴道",
    "大磴沟",
    "刀尔登",
    "得耳布尔",
    "东方",
    "丹凤",
    "东丰",
    "都格",
    "大官屯",
    "大关",
    "东光",
    "东海",
    "大灰厂",
    "大红旗",
    "大禾塘",
    "东海县",
    "德惠西",
    "达家沟",
    "东津",
    "杜家",
    "大口屯",
    "东来",
    "德令哈",
    "大陆号",
    "带岭",
    "大林",
    "达拉特旗",
    "独立屯",
    "豆罗",
    "达拉特西",
    "大连西",
    "东明村",
    "洞庙河",
    "东明县",
    "大拟",
    "大平房",
    "大盘石",
    "大埔",
    "大堡",
    "大庆东",
    "大其拉哈",
    "道清",
    "对青山",
    "德清西",
    "大庆西",
    "东升",
    "砀山",
    "独山",
    "登沙河",
    "读书铺",
    "大石头",
    "东胜西",
    "大石寨",
    "东台",
    "定陶",
    "灯塔",
    "大田边",
    "东通化",
    "丹徒",
    "大屯",
    "东湾",
    "大武口",
    "低窝铺",
    "大王滩",
    "大湾子",
    "大兴沟",
    "大兴",
    "定西",
    "甸心",
    "东乡",
    "代县",
    "定襄",
    "东戌",
    "东辛庄",
    "丹阳",
    "德阳",
    "大雁",
    "当阳",
    "丹阳北",
    "大英东",
    "东淤地",
    "大营",
    "定远",
    "岱岳",
    "大元",
    "大营镇",
    "大营子",
    "大战场",
    "德州东",
    "东至",
    "低庄",
    "东镇",
    "道州",
    "东庄",
    "兑镇",
    "豆庄",
    "定州",
    "大竹园",
    "大杖子",
    "豆张庄",
    "峨边",
    "二道沟门",
    "二道湾",
    "鄂尔多斯",
    "二龙",
    "二龙山屯",
    "峨眉",
    "二密河",
    "二营",
    "鄂州",
    "福安",
    "丰城",
    "丰城南",
    "肥东",
    "发耳",
    "富海",
    "福海",
    "凤凰城",
    "汾河",
    "奉化",
    "富锦",
    "范家屯",
    "福利区",
    "福利屯",
    "丰乐镇",
    "阜南",
    "阜宁",
    "抚宁",
    "福清",
    "福泉",
    "丰水村",
    "丰顺",
    "繁峙",
    "抚顺",
    "福山口",
    "扶绥",
    "冯屯",
    "浮图峪",
    "富县东",
    "凤县",
    "富县",
    "费县",
    "凤阳",
    "汾阳",
    "扶余北",
    "分宜",
    "富源",
    "扶余",
    "富裕",
    "抚州北",
    "凤州",
    "丰镇",
    "范镇",
    "固安",
    "广安",
    "高碑店",
    "沟帮子",
    "甘草店",
    "谷城",
    "藁城",
    "高村",
    "古城镇",
    "广德",
    "贵定",
    "贵定南",
    "古东",
    "贵港",
    "官高",
    "葛根庙",
    "干沟",
    "甘谷",
    "高各庄",
    "甘河",
    "根河",
    "郭家店",
    "孤家子",
    "古浪",
    "皋兰",
    "高楼房",
    "归流河",
    "关林",
    "甘洛",
    "郭磊庄",
    "高密",
    "公庙子",
    "工农湖",
    "广宁寺南",
    "广南卫",
    "高平",
    "甘泉北",
    "共青城",
    "甘旗卡",
    "甘泉",
    "高桥镇",
    "灌水",
    "赶水",
    "孤山口",
    "果松",
    "高山子",
    "嘎什甸子",
    "高台",
    "高滩",
    "古田",
    "官厅",
    "官厅西",
    "贵溪",
    "涡阳",
    "巩义",
    "高邑",
    "巩义南",
    "广元南",
    "固原",
    "菇园",
    "公营子",
    "光泽",
    "古镇",
    "固镇",
    "虢镇",
    "瓜州",
    "高州",
    "盖州",
    "官字井",
    "冠豸山",
    "盖州西",
    "淮安南",
    "红安",
    "海安县",
    "红安西",
    "黄柏",
    "海北",
    "鹤壁",
    "会昌北",
    "华城",
    "河唇",
    "汉川",
    "海城",
    "合川",
    "黑冲滩",
    "黄村",
    "海城西",
    "化德",
    "洪洞",
    "霍尔果斯",
    "横峰",
    "韩府湾",
    "汉沽",
    "黄瓜园",
    "红光镇",
    "浑河",
    "红花沟",
    "黄花筒",
    "贺家店",
    "和静",
    "红江",
    "黑井",
    "获嘉",
    "河津",
    "涵江",
    "华家",
    "杭锦后旗",
    "河间西",
    "花家庄",
    "河口南",
    "黄口",
    "湖口",
    "呼兰",
    "葫芦岛北",
    "浩良河",
    "哈拉海",
    "鹤立",
    "桦林",
    "黄陵",
    "海林",
    "虎林",
    "寒岭",
    "和龙",
    "海龙",
    "哈拉苏",
    "呼鲁斯太",
    "火连寨",
    "黄梅",
    "韩麻营",
    "黄泥河",
    "海宁",
    "惠农",
    "和平",
    "花棚子",
    "花桥",
    "宏庆",
    "怀仁",
    "华容",
    "华山北",
    "黄松甸",
    "和什托洛盖",
    "红山",
    "汉寿",
    "衡山",
    "黑水",
    "惠山",
    "虎什哈",
    "红寺堡",
    "虎石台",
    "海石湾",
    "衡山西",
    "红砂岘",
    "黑台",
    "桓台",
    "和田",
    "会同",
    "海坨子",
    "黑旺",
    "海湾",
    "红星",
    "徽县",
    "红兴隆",
    "换新天",
    "红岘台",
    "红彦",
    "合阳",
    "海阳",
    "衡阳东",
    "华蓥",
    "汉阴",
    "黄羊滩",
    "汉源",
    "河源",
    "花园",
    "湟源",
    "黄羊镇",
    "湖州",
    "化州",
    "黄州",
    "霍州",
    "惠州西",
    "巨宝",
    "靖边",
    "金宝屯",
    "晋城北",
    "金昌",
    "鄄城",
    "交城",
    "建昌",
    "峻德",
    "井店",
    "鸡东",
    "江都",
    "鸡冠山",
    "金沟屯",
    "静海",
    "金河",
    "锦河",
    "精河",
    "精河南",
    "江华",
    "建湖",
    "纪家沟",
    "晋江",
    "姜家",
    "江津",
    "金坑",
    "芨岭",
    "金马村",
    "江门东",
    "角美",
    "莒南",
    "井南",
    "建瓯",
    "经棚",
    "江桥",
    "九三",
    "金山北",
    "嘉善",
    "京山",
    "建始",
    "稷山",
    "吉舒",
    "建设",
    "甲山",
    "建三江",
    "嘉善南",
    "金山屯",
    "江所田",
    "景泰",
    "九台南",
    "吉文",
    "进贤",
    "莒县",
    "嘉祥",
    "介休",
    "嘉兴",
    "井陉",
    "嘉兴南",
    "夹心子",
    "姜堰",
    "揭阳",
    "建阳",
    "简阳",
    "巨野",
    "江永",
    "缙云",
    "靖远",
    "江源",
    "济源",
    "靖远西",
    "胶州北",
    "焦作东",
    "金寨",
    "靖州",
    "荆州",
    "胶州",
    "晋州",
    "锦州南",
    "焦作",
    "旧庄窝",
    "金杖子",
    "开安",
    "库车",
    "康城",
    "库都尔",
    "宽甸",
    "克东",
    "昆都仑召",
    "开江",
    "康金井",
    "喀喇其",
    "开鲁",
    "克拉玛依",
    "口前",
    "昆山",
    "奎山",
    "克山",
    "开通",
    "康熙岭",
    "昆阳",
    "克一河",
    "开原西",
    "康庄",
    "来宾",
    "老边",
    "灵宝西",
    "龙川",
    "乐昌",
    "黎城",
    "聊城",
    "蓝村",
    "两当",
    "林东",
    "乐都",
    "梁底下",
    "六道河子",
    "鲁番",
    "廊坊",
    "落垡",
    "廊坊北",
    "老府",
    "兰岗",
    "龙骨甸",
    "芦沟",
    "龙沟",
    "拉古",
    "临海",
    "林海",
    "拉哈",
    "凌海",
    "柳河",
    "六合",
    "龙华",
    "滦河沿",
    "六合镇",
    "亮甲店",
    "刘家店",
    "刘家河",
    "连江",
    "庐江",
    "李家",
    "罗江",
    "廉江",
    "两家",
    "龙江",
    "龙嘉",
    "莲江口",
    "蔺家楼",
    "李家坪",
    "兰考",
    "林口",
    "路口铺",
    "老莱",
    "拉林",
    "陆良",
    "龙里",
    "临澧",
    "兰棱",
    "零陵",
    "卢龙",
    "喇嘛甸",
    "里木店",
    "洛门",
    "龙南",
    "梁平",
    "罗平",
    "落坡岭",
    "六盘山",
    "乐平市",
    "临清",
    "龙泉寺",
    "乐山北",
    "乐善村",
    "冷水江东",
    "连山关",
    "流水沟",
    "陵水",
    "丽水",
    "罗山",
    "鲁山",
    "梁山",
    "灵石",
    "露水河",
    "庐山",
    "林盛堡",
    "柳树屯",
    "龙山镇",
    "梨树镇",
    "李石寨",
    "黎塘",
    "轮台",
    "芦台",
    "龙塘坝",
    "濑湍",
    "骆驼巷",
    "李旺",
    "莱芜东",
    "狼尾山",
    "灵武",
    "莱芜西",
    "朗乡",
    "陇县",
    "临湘",
    "芦溪",
    "莱西",
    "林西",
    "滦县",
    "略阳",
    "莱阳",
    "辽阳",
    "临沂北",
    "凌源东",
    "连云港",
    "临颍",
    "老营",
    "龙游",
    "罗源",
    "林源",
    "涟源",
    "涞源",
    "耒阳西",
    "临泽",
    "龙爪沟",
    "雷州",
    "六枝",
    "鹿寨",
    "来舟",
    "龙镇",
    "拉鲊",
    "兰州新区",
    "马鞍山",
    "毛坝",
    "毛坝关",
    "麻城北",
    "渑池",
    "明城",
    "庙城",
    "渑池南",
    "茅草坪",
    "猛洞河",
    "磨刀石",
    "弥渡",
    "帽儿山",
    "明港",
    "梅河口",
    "马皇",
    "孟家岗",
    "美兰",
    "汨罗东",
    "马莲河",
    "茅岭",
    "庙岭",
    "茂林",
    "穆棱",
    "马林",
    "马龙",
    "木里图",
    "汨罗",
    "玛纳斯湖",
    "冕宁",
    "沐滂",
    "马桥河",
    "闽清",
    "民权",
    "明水河",
    "麻山",
    "眉山",
    "漫水湾",
    "茂舍祖",
    "米沙子",
    "美溪",
    "勉县",
    "麻阳",
    "密云北",
    "米易",
    "麦园",
    "墨玉",
    "庙庄",
    "米脂",
    "明珠",
    "宁安",
    "农安",
    "南博山",
    "南仇",
    "南城司",
    "宁村",
    "宁德",
    "南观村",
    "南宫东",
    "南关岭",
    "宁国",
    "宁海",
    "南华北",
    "南河川",
    "泥河子",
    "宁家",
    "南靖",
    "牛家",
    "能家",
    "南口",
    "南口前",
    "南朗",
    "乃林",
    "尼勒克",
    "那罗",
    "宁陵县",
    "奈曼",
    "宁明",
    "南木",
    "南平南",
    "那铺",
    "南桥",
    "那曲",
    "暖泉",
    "南台",
    "南头",
    "宁武",
    "南湾子",
    "南翔北",
    "宁乡",
    "内乡",
    "牛心台",
    "南峪",
    "娘子关",
    "南召",
    "南杂木",
    "蓬安",
    "平安",
    "平安驿",
    "磐安镇",
    "平安镇",
    "蒲城东",
    "蒲城",
    "裴德",
    "偏店",
    "平顶山西",
    "坡底下",
    "瓢儿屯",
    "平房",
    "平岗",
    "平关",
    "盘关",
    "平果",
    "徘徊北",
    "平河口",
    "平湖",
    "盘锦北",
    "潘家店",
    "皮口南",
    "普兰店",
    "偏岭",
    "平山",
    "彭山",
    "皮山",
    "磐石",
    "平社",
    "彭水",
    "平台",
    "平田",
    "莆田",
    "葡萄菁",
    "普湾",
    "平旺",
    "平型关",
    "普雄",
    "郫县",
    "平洋",
    "彭阳",
    "平遥",
    "平邑",
    "平原堡",
    "平原",
    "平峪",
    "彭泽",
    "邳州",
    "平庄",
    "泡子",
    "平庄南",
    "乾安",
    "庆安",
    "迁安",
    "祁东北",
    "七甸",
    "曲阜东",
    "庆丰",
    "奇峰塔",
    "曲阜",
    "琼海",
    "秦皇岛",
    "千河",
    "清河",
    "清河门",
    "清华园",
    "全椒",
    "渠旧",
    "潜江",
    "秦家",
    "綦江",
    "祁家堡",
    "清涧县",
    "秦家庄",
    "七里河",
    "秦岭",
    "渠黎",
    "青龙",
    "青龙山",
    "祁门",
    "前磨头",
    "青山",
    "确山",
    "前山",
    "清水",
    "戚墅堰",
    "青田",
    "桥头",
    "青铜峡",
    "前卫",
    "前苇塘",
    "渠县",
    "祁县",
    "青县",
    "桥西",
    "清徐",
    "旗下营",
    "千阳",
    "沁阳",
    "泉阳",
    "祁阳北",
    "七营",
    "庆阳山",
    "清远",
    "清原",
    "钦州东",
    "钦州",
    "青州市",
    "瑞安",
    "荣昌",
    "瑞昌",
    "如皋",
    "容桂",
    "任丘",
    "乳山",
    "融水",
    "热水",
    "容县",
    "饶阳",
    "汝阳",
    "绕阳河",
    "汝州",
    "石坝",
    "上板城",
    "施秉",
    "上板城南",
    "世博园",
    "双城北",
    "舒城",
    "商城",
    "莎车",
    "顺昌",
    "神池",
    "沙城",
    "石城",
    "山城镇",
    "山丹",
    "顺德",
    "绥德",
    "水洞",
    "商都",
    "十渡",
    "四道湾",
    "顺德学院",
    "绅坊",
    "双丰",
    "四方台",
    "水富",
    "三关口",
    "桑根达来",
    "韶关",
    "上高镇",
    "上杭",
    "沙海",
    "松河",
    "沙河",
    "沙河口",
    "赛汗塔拉",
    "沙河市",
    "沙后所",
    "山河屯",
    "三河县",
    "四合永",
    "三汇镇",
    "双河镇",
    "石河子",
    "三合庄",
    "三家店",
    "水家湖",
    "沈家河",
    "松江河",
    "尚家",
    "孙家",
    "沈家",
    "双吉",
    "松江",
    "三江口",
    "司家岭",
    "松江南",
    "石景山南",
    "邵家堂",
    "三江县",
    "三家寨",
    "十家子",
    "松江镇",
    "施家嘴",
    "深井子",
    "什里店",
    "疏勒",
    "疏勒河",
    "舍力虎",
    "石磷",
    "石林",
    "双辽",
    "绥棱",
    "石岭",
    "石林南",
    "石龙",
    "萨拉齐",
    "索伦",
    "商洛",
    "沙岭子",
    "石门县北",
    "三门峡南",
    "三门县",
    "石门县",
    "三门峡西",
    "肃宁",
    "宋",
    "双牌",
    "四平东",
    "遂平",
    "沙坡头",
    "沙桥",
    "商丘南",
    "水泉",
    "石泉县",
    "石桥子",
    "石人城",
    "石人",
    "山市",
    "神树",
    "鄯善",
    "三水",
    "泗水",
    "石山",
    "松树",
    "首山",
    "三十家",
    "三十里堡",
    "松树镇",
    "松桃",
    "索图罕",
    "三堂集",
    "石头",
    "神头",
    "沙沱",
    "上万",
    "孙吴",
    "沙湾县",
    "歙县",
    "遂溪",
    "沙县",
    "绍兴",
    "石岘",
    "上西铺",
    "石峡子",
    "沭阳",
    "绥阳",
    "寿阳",
    "水洋",
    "三阳川",
    "上腰墩",
    "三营",
    "顺义",
    "三义井",
    "三源浦",
    "上虞",
    "三原",
    "上园",
    "水源",
    "桑园子",
    "绥中北",
    "苏州北",
    "宿州东",
    "深圳东",
    "深州",
    "孙镇",
    "绥中",
    "尚志",
    "师庄",
    "松滋",
    "师宗",
    "苏州园区",
    "苏州新区",
    "泰安",
    "台安",
    "通安驿",
    "桐柏",
    "通北",
    "桐城",
    "汤池",
    "郯城",
    "铁厂",
    "桃村",
    "通道",
    "田东",
    "天岗",
    "土贵乌拉",
    "通沟",
    "太谷",
    "塔哈",
    "棠海",
    "唐河",
    "泰和",
    "太湖",
    "团结",
    "谭家井",
    "陶家屯",
    "唐家湾",
    "统军庄",
    "泰康",
    "吐列毛杜",
    "图里河",
    "铜陵",
    "田林",
    "亭亮",
    "铁力",
    "铁岭西",
    "图们北",
    "天门",
    "天门南",
    "太姥山",
    "土牧尔台",
    "土门子",
    "洮南",
    "潼南",
    "太平川",
    "太平镇",
    "图强",
    "台前",
    "天桥岭",
    "土桥子",
    "汤山城",
    "桃山",
    "塔石嘴",
    "通途",
    "汤旺河",
    "同心",
    "土溪",
    "桐乡",
    "田阳",
    "天义",
    "汤阴",
    "驼腰岭",
    "太阳山",
    "汤原",
    "塔崖驿",
    "滕州东",
    "台州",
    "天祝",
    "滕州",
    "天镇",
    "桐子林",
    "天柱山",
    "文安",
    "武安",
    "王安镇",
    "吴堡",
    "旺苍",
    "五叉沟",
    "文昌",
    "温春",
    "五大连池",
    "文登",
    "五道沟",
    "五道河",
    "文地",
    "卫东",
    "武当山",
    "望都",
    "乌尔旗汗",
    "潍坊",
    "万发屯",
    "王府",
    "瓦房店西",
    "王岗",
    "武功",
    "湾沟",
    "吴官田",
    "乌海",
    "苇河",
    "卫辉",
    "吴家川",
    "五家",
    "威箐",
    "午汲",
    "渭津",
    "王家湾",
    "倭肯",
    "五棵树",
    "五龙背",
    "乌兰哈达",
    "万乐",
    "瓦拉干",
    "温岭",
    "五莲",
    "乌拉特前旗",
    "乌拉山",
    "卧里屯",
    "渭南北",
    "乌奴耳",
    "万宁",
    "万年",
    "渭南南",
    "渭南镇",
    "沃皮",
    "吴桥",
    "汪清",
    "武清",
    "武山",
    "文水",
    "魏善庄",
    "王瞳",
    "五台山",
    "王团庄",
    "五五",
    "无锡东",
    "卫星",
    "闻喜",
    "武乡",
    "无锡新区",
    "武穴",
    "吴圩",
    "王杨",
    "武义",
    "五营",
    "瓦窑田",
    "五原",
    "苇子沟",
    "韦庄",
    "五寨",
    "王兆屯",
    "微子镇",
    "魏杖子",
    "新安",
    "兴安",
    "新安县",
    "新保安",
    "下板城",
    "西八里",
    "宣城",
    "兴城",
    "小村",
    "新绰源",
    "下城子",
    "新城子",
    "喜德",
    "小得江",
    "西大庙",
    "小董",
    "小东",
    "信丰",
    "襄汾",
    "息烽",
    "新干",
    "孝感",
    "西固城",
    "西固",
    "夏官营",
    "西岗子",
    "襄河",
    "新和",
    "宣和",
    "斜河涧",
    "新华屯",
    "新华",
    "新化",
    "宣化",
    "兴和西",
    "小河沿",
    "下花园",
    "小河镇",
    "徐家",
    "峡江",
    "新绛",
    "辛集",
    "新江",
    "西街口",
    "许家屯",
    "许家台",
    "谢家镇",
    "兴凯",
    "小榄",
    "香兰",
    "兴隆店",
    "新乐",
    "新林",
    "小岭",
    "新李",
    "西林",
    "西柳",
    "仙林",
    "新立屯",
    "兴隆镇",
    "新立镇",
    "新民",
    "西麻山",
    "下马塘",
    "孝南",
    "咸宁北",
    "兴宁",
    "咸宁",
    "犀浦东",
    "西平",
    "兴平",
    "新坪田",
    "霞浦",
    "溆浦",
    "犀浦",
    "新青",
    "新邱",
    "兴泉堡",
    "仙人桥",
    "小寺沟",
    "杏树",
    "浠水",
    "下社",
    "徐水",
    "夏石",
    "小哨",
    "新松浦",
    "杏树屯",
    "许三湾",
    "湘潭",
    "邢台",
    "仙桃西",
    "下台子",
    "徐闻",
    "新窝铺",
    "修武",
    "新县",
    "息县",
    "西乡",
    "湘乡",
    "西峡",
    "孝西",
    "小新街",
    "新兴县",
    "西小召",
    "小西庄",
    "向阳",
    "旬阳",
    "旬阳北",
    "襄阳东",
    "兴业",
    "小雨谷",
    "信宜",
    "小月旧",
    "小扬气",
    "祥云",
    "襄垣",
    "夏邑县",
    "新友谊",
    "新阳镇",
    "徐州东",
    "新帐房",
    "悬钟",
    "新肇",
    "忻州",
    "汐子",
    "西哲里木",
    "新杖子",
    "姚安",
    "依安",
    "永安",
    "永安乡",
    "亚布力",
    "元宝山",
    "羊草",
    "秧草地",
    "阳澄湖",
    "迎春",
    "叶城",
    "盐池",
    "砚川",
    "阳春",
    "宜城",
    "应城",
    "禹城",
    "晏城",
    "阳城",
    "阳岔",
    "郓城",
    "雁翅",
    "云彩岭",
    "虞城县",
    "营城子",
    "英德",
    "永登",
    "尹地",
    "永定",
    "雁荡山",
    "于都",
    "园墩",
    "英德西",
    "永丰营",
    "杨岗",
    "阳高",
    "阳谷",
    "友好",
    "余杭",
    "沿河城",
    "岩会",
    "羊臼河",
    "永嘉",
    "营街",
    "盐津",
    "余江",
    "燕郊",
    "姚家",
    "岳家井",
    "一间堡",
    "英吉沙",
    "云居寺",
    "燕家庄",
    "永康",
    "营口东",
    "银浪",
    "永郎",
    "宜良北",
    "永乐店",
    "伊拉哈",
    "伊林",
    "杨陵",
    "彝良",
    "杨林",
    "余粮堡",
    "杨柳青",
    "月亮田",
    "义马",
    "阳明堡",
    "玉门",
    "云梦",
    "元谋",
    "一面山",
    "沂南",
    "宜耐",
    "伊宁东",
    "营盘水",
    "羊堡",
    "阳泉北",
    "乐清",
    "焉耆",
    "源迁",
    "姚千户屯",
    "阳曲",
    "榆树沟",
    "月山",
    "玉石",
    "玉舍",
    "偃师",
    "沂水",
    "榆社",
    "颍上",
    "窑上",
    "元氏",
    "杨树岭",
    "野三坡",
    "榆树屯",
    "榆树台",
    "鹰手营子",
    "源潭",
    "牙屯堡",
    "烟筒山",
    "烟筒屯",
    "羊尾哨",
    "越西",
    "攸县",
    "永修",
    "玉溪西",
    "弋阳",
    "余姚",
    "酉阳",
    "岳阳东",
    "阳邑",
    "鸭园",
    "鸳鸯镇",
    "燕子砭",
    "仪征",
    "宜州",
    "兖州",
    "迤资",
    "羊者窝",
    "杨杖子",
    "镇安",
    "治安",
    "招柏",
    "张百湾",
    "中川机场",
    "枝城",
    "子长",
    "诸城",
    "邹城",
    "赵城",
    "章党",
    "正定",
    "肇东",
    "照福铺",
    "章古台",
    "赵光",
    "中和",
    "中华门",
    "枝江北",
    "钟家村",
    "朱家沟",
    "紫荆关",
    "周家",
    "诸暨",
    "镇江南",
    "周家屯",
    "褚家湾",
    "湛江西",
    "朱家窑",
    "曾家坪子",
    "张兰",
    "镇赉",
    "枣林",
    "扎鲁特",
    "扎赉诺尔西",
    "樟木头",
    "中牟",
    "中宁东",
    "中宁",
    "中宁南",
    "镇平",
    "漳平",
    "泽普",
    "枣强",
    "张桥",
    "章丘",
    "朱日和",
    "泽润里",
    "中山北",
    "樟树东",
    "珠斯花",
    "中山",
    "柞水",
    "钟山",
    "樟树",
    "珠窝",
    "张维屯",
    "彰武",
    "棕溪",
    "钟祥",
    "资溪",
    "镇西",
    "张辛",
    "正镶白旗",
    "紫阳",
    "枣阳",
    "竹园坝",
    "张掖",
    "镇远",
    "漳州东",
    "漳州",
    "壮志",
    "子洲",
    "中寨",
    "涿州",
    "咋子",
    "卓资山",
    "株洲西",
    "郑州西",
    "阿巴嘎旗",
    "阿尔山北",
    "阿勒泰",
    "安仁",
    "安顺西",
    "安图西",
    "安阳东",
    "博白",
    "八步",
    "栟茶",
    "保定东",
    "白沟",
    "滨海",
    "滨海北",
    "宝鸡南",
    "北井子",
    "白马井",
    "宝清",
    "璧山",
    "白沙铺",
    "白水县",
    "板塘",
    "本溪新城",
    "彬县",
    "宾阳",
    "白洋淀",
    "百宜",
    "白音华南",
    "巴中东",
    "滨州",
    "霸州西",
    "澄城",
    "城固北",
    "查干湖",
    "巢湖东",
    "从江",
    "茶卡",
    "长临河",
    "茶陵南",
    "常平东",
    "长庆桥",
    "长寿北",
    "长寿湖",
    "潮汕",
    "朝天",
    "长汀南",
    "长武",
    "长兴",
    "苍溪",
    "长阳",
    "潮阳",
    "城子坦",
    "东安东",
    "德保",
    "东岔",
    "东戴河",
    "丹东西",
    "东二道河",
    "大丰",
    "大方南",
    "东港北",
    "大孤山",
    "东莞",
    "鼎湖东",
    "鼎湖山",
    "洞井",
    "垫江",
    "大苴",
    "大荔",
    "大青沟",
    "德清",
    "砀山南",
    "大石头南",
    "当涂东",
    "大通西",
    "大旺",
    "定西北",
    "德兴",
    "丹霞山",
    "大冶北",
    "都匀东",
    "东营南",
    "大余",
    "定州东",
    "端州",
    "大足南",
    "峨眉山",
    "阿房宫",
    "鄂州东",
    "防城港北",
    "凤城东",
    "富川",
    "繁昌西",
    "丰都",
    "涪陵北",
    "枫林",
    "富宁",
    "佛坪",
    "法启",
    "芙蓉南",
    "复盛",
    "抚松",
    "佛山西",
    "福山镇",
    "福田",
    "富源北",
    "抚远",
    "抚州东",
    "抚州",
    "高安",
    "广安南",
    "贵安",
    "高碑店东",
    "恭城",
    "贵定北",
    "葛店南",
    "贵定县",
    "广汉北",
    "高花",
    "革居",
    "关岭",
    "桂林西",
    "光明城",
    "广宁",
    "广宁寺",
    "广南县",
    "桂平",
    "弓棚子",
    "光山",
    "古田北",
    "广通北",
    "高台南",
    "古田会址",
    "贵阳北",
    "贵阳东",
    "高邑西",
    "惠安",
    "鹤壁东",
    "寒葱沟",
    "霍城",
    "珲春",
    "邯郸东",
    "惠东",
    "哈达铺",
    "海东西",
    "洪洞西",
    "哈尔滨北",
    "合肥北城",
    "合肥南",
    "黄冈",
    "黄冈东",
    "横沟桥东",
    "黄冈西",
    "洪河",
    "怀化南",
    "黄河景区",
    "花湖",
    "惠环",
    "后湖",
    "怀集",
    "河口北",
    "黄流",
    "黄陵南",
    "鲘门",
    "虎门",
    "侯马西",
    "衡南",
    "淮南东",
    "合浦",
    "霍邱",
    "怀仁东",
    "华容东",
    "华容南",
    "黄石北",
    "黄山北",
    "贺胜桥东",
    "和硕",
    "花山南",
    "荷塘",
    "合阳北",
    "海阳北",
    "槐荫",
    "鄠邑",
    "花园口",
    "霍州东",
    "惠州南",
    "建安",
    "泾川",
    "旌德",
    "尖峰",
    "近海",
    "蛟河西",
    "军粮城北",
    "将乐",
    "贾鲁河",
    "九郎山",
    "即墨北",
    "剑门关",
    "建宁县北",
    "江宁",
    "江宁西",
    "建瓯西",
    "酒泉南",
    "句容西",
    "建水",
    "界首市",
    "绩溪北",
    "介休东",
    "泾县",
    "靖西",
    "进贤南",
    "江油北",
    "嘉峪关南",
    "简阳南",
    "金银潭",
    "靖宇",
    "金月湾",
    "缙云西",
    "晋中",
    "开封北",
    "凯里南",
    "库伦",
    "昆明南",
    "葵潭",
    "开阳",
    "隆安东",
    "来宾北",
    "灵璧",
    "绿博园",
    "隆昌北",
    "乐昌东",
    "临城",
    "罗城",
    "陵城",
    "老城镇",
    "龙洞堡",
    "乐都南",
    "娄底南",
    "乐东",
    "离堆公园",
    "陆丰",
    "龙丰",
    "禄丰南",
    "临汾西",
    "临高南",
    "滦河",
    "漯河西",
    "罗江东",
    "柳江",
    "利津南",
    "兰考南",
    "兰陵北",
    "龙里北",
    "沥林北",
    "醴陵东",
    "陇南",
    "梁平南",
    "礼泉",
    "灵石东",
    "乐山",
    "龙市",
    "溧水",
    "洛湾三江",
    "莱西北",
    "溧阳",
    "临邑",
    "柳园南",
    "鹿寨北",
    "阆中",
    "临泽南",
    "马鞍山东",
    "毛陈",
    "明港东",
    "民和南",
    "闵集",
    "马兰",
    "民乐",
    "弥勒",
    "玛纳斯",
    "牟平",
    "闽清北",
    "民权北",
    "眉山东",
    "庙山",
    "岷县",
    "门源",
    "暮云",
    "蒙自北",
    "孟庄",
    "蒙自",
    "南部",
    "南曹",
    "南充北",
    "南城",
    "南昌西",
    "宁东南",
    "宁东",
    "南芬北",
    "南丰",
    "南湖东",
    "内江北",
    "南江",
    "南江口",
    "南陵",
    "尼木",
    "南宁东",
    "南宁西",
    "南平北",
    "宁强南",
    "南雄",
    "纳雍",
    "南阳寨",
    "普安",
    "普安县",
    "屏边",
    "平坝南",
    "平昌",
    "普定",
    "平度",
    "皮口",
    "盘龙城",
    "普宁",
    "平南南",
    "彭山北",
    "盘山",
    "坪上",
    "萍乡北",
    "濮阳",
    "平遥古城",
    "普者黑",
    "盘州",
    "彭州",
    "秦安",
    "青白江东",
    "青川",
    "青岛北",
    "祁东",
    "青堆",
    "前锋",
    "曲靖北",
    "曲江",
    "青莲",
    "齐齐哈尔南",
    "清水北",
    "青神",
    "岐山",
    "庆盛",
    "曲水县",
    "祁县东",
    "乾县",
    "旗下营南",
    "祁阳",
    "全州南",
    "棋子湾",
    "仁布",
    "荣昌北",
    "荣成",
    "瑞昌西",
    "如东",
    "榕江",
    "日喀则",
    "饶平",
    "宋城路",
    "三道湖",
    "邵东",
    "三都县",
    "胜芳",
    "双峰北",
    "商河",
    "泗洪",
    "四会",
    "三江南",
    "三井子",
    "双流机场",
    "石林西",
    "沙岭子西",
    "双流西",
    "三明北",
    "嵩明",
    "树木岭",
    "苏尼特左旗",
    "山坡东",
    "石桥",
    "沈丘",
    "鄯善北",
    "狮山北",
    "三水北",
    "狮山",
    "三水南",
    "韶山南",
    "三穗",
    "石梯",
    "汕尾",
    "歙县北",
    "绍兴北",
    "绍兴东",
    "泗县",
    "始兴",
    "泗阳",
    "双阳",
    "邵阳北",
    "松原北",
    "山阴",
    "沈阳南",
    "深圳北",
    "神州",
    "深圳坪山",
    "石嘴山",
    "石柱县",
    "台安南",
    "桃村北",
    "田东北",
    "土地堂东",
    "太谷西",
    "吐哈",
    "通海",
    "太和北",
    "天河机场",
    "天河街",
    "通化县",
    "同江",
    "铜陵北",
    "吐鲁番北",
    "泰宁",
    "铜仁南",
    "天水南",
    "通渭",
    "田心东",
    "汤逊湖",
    "藤县",
    "太原南",
    "通远堡西",
    "文登东",
    "五府山",
    "威虎岭北",
    "威海北",
    "乌兰察布",
    "五龙背东",
    "乌龙泉南",
    "乌鲁木齐",
    "五女山",
    "武胜",
    "无为",
    "瓦屋山",
    "闻喜西",
    "武义北",
    "武夷山北",
    "武夷山东",
    "婺源",
    "渭源",
    "万州北",
    "武陟",
    "梧州南",
    "兴安北",
    "许昌东",
    "项城",
    "新都东",
    "西丰",
    "先锋",
    "湘府路",
    "襄汾西",
    "孝感北",
    "孝感东",
    "西湖东",
    "新化南",
    "新晃西",
    "新津",
    "小金口",
    "新津南",
    "咸宁东",
    "咸宁南",
    "溆浦南",
    "湘潭北",
    "邢台东",
    "西乌旗",
    "修武西",
    "萧县北",
    "新乡东",
    "新余北",
    "西阳村",
    "信阳东",
    "咸阳秦都",
    "仙游",
    "新郑机场",
    "香樟路",
    "迎宾路",
    "永城北",
    "运城北",
    "永川东",
    "宜春",
    "岳池",
    "云东海",
    "姚渡",
    "云浮东",
    "永福南",
    "雨格",
    "洋河",
    "永济北",
    "弋江",
    "于家堡",
    "延吉西",
    "永康南",
    "运粮河",
    "炎陵",
    "杨陵南",
    "伊敏",
    "郁南",
    "银瓶",
    "永寿",
    "阳朔",
    "云山",
    "玉山南",
    "银滩",
    "永泰",
    "鹰潭北",
    "烟台南",
    "伊通",
    "尤溪",
    "云霄",
    "宜兴",
    "玉溪",
    "阳信",
    "应县",
    "攸县南",
    "洋县西",
    "余姚北",
    "榆中",
    "诏安",
    "正定机场",
    "纸坊东",
    "庄河北",
    "昭化",
    "织金北",
    "芷江",
    "织金",
    "仲恺",
    "曾口",
    "左岭",
    "樟木头东",
    "驻马店西",
    "漳浦",
    "肇庆东",
    "庄桥",
    "昭山",
    "钟山西",
    "漳县",
    "资阳北",
    "张掖西",
    "资中北",
    "涿州东",
    "枣庄东",
    "卓资东",
    "郑州东",
    "株洲南",
    "杭州西",
    "重庆西",
    "张家界西"
]
CITY_CODE = [
    "VAP",
    "BOP",
    "BJP",
    "VNP",
    "BXP",
    "IZQ",
    "CUW",
    "CQW",
    "CRW",
    "GGQ",
    "SHH",
    "SNH",
    "AOH",
    "SXH",
    "TBP",
    "TJP",
    "TIP",
    "TXP",
    "CCT",
    "CET",
    "CRT",
    "ICW",
    "CNW",
    "CDW",
    "CWQ",
    "CSQ",
    "FZS",
    "FYS",
    "GIW",
    "GZQ",
    "GXQ",
    "HBB",
    "VBB",
    "VAB",
    "HFH",
    "HTH",
    "NDC",
    "HHC",
    "KEQ",
    "HMQ",
    "VUQ",
    "HGH",
    "HZH",
    "XHH",
    "JNK",
    "JAK",
    "JGK",
    "KMM",
    "KXM",
    "LSO",
    "LVJ",
    "LZJ",
    "LAJ",
    "NCG",
    "NJH",
    "NKH",
    "NNZ",
    "VVP",
    "SJP",
    "SYT",
    "SBT",
    "SDT",
    "TBV",
    "TDV",
    "TYV",
    "WHN",
    "KNM",
    "WMR",
    "EAY",
    "XAY",
    "CAY",
    "XNO",
    "YIJ",
    "ZZF",
    "ART",
    "AKY",
    "ASR",
    "AHX",
    "AKR",
    "APT",
    "AQH",
    "ASW",
    "AST",
    "AYF",
    "BAB",
    "BBH",
    "BCT",
    "BHZ",
    "BEL",
    "BAP",
    "BJY",
    "BJB",
    "BKX",
    "BIZ",
    "HJL",
    "BTT",
    "BDC",
    "BTC",
    "BXR",
    "BXT",
    "BEC",
    "BXJ",
    "BZH",
    "CBN",
    "VGQ",
    "CDP",
    "CDT",
    "CFD",
    "CDG",
    "CEH",
    "CPP",
    "CRG",
    "CTT",
    "CDB",
    "CXK",
    "COM",
    "CXT",
    "CBF",
    "IYH",
    "CZJ",
    "CZH",
    "CZQ",
    "CZF",
    "COP",
    "CZZ",
    "RNT",
    "DCT",
    "DUT",
    "DFB",
    "DMQ",
    "DHD",
    "DHJ",
    "DHL",
    "DHT",
    "DJB",
    "DFP",
    "DDW",
    "DFT",
    "DKM",
    "DLT",
    "DNG",
    "DZX",
    "DOC",
    "DQT",
    "DTV",
    "DPK",
    "DUX",
    "RYW",
    "DOF",
    "RXW",
    "DZP",
    "EJC",
    "RLC",
    "ESN",
    "FES",
    "FJQ",
    "FLV",
    "FLW",
    "FRX",
    "FET",
    "FSQ",
    "FXD",
    "FYH",
    "GRO",
    "GHW",
    "GJV",
    "GBZ",
    "GRX",
    "GLZ",
    "GXN",
    "GSN",
    "GNJ",
    "GYW",
    "GBQ",
    "GZG",
    "GLT",
    "GBT",
    "AUH",
    "HRH",
    "HMB",
    "HVN",
    "HBV",
    "KCN",
    "HCY",
    "HDP",
    "HDB",
    "HGB",
    "HTT",
    "HEM",
    "HJB",
    "HHQ",
    "HKN",
    "HLD",
    "HRX",
    "HWD",
    "HLB",
    "HMV",
    "HMR",
    "HAH",
    "HNB",
    "EUH",
    "HQM",
    "HBP",
    "HRP",
    "OSN",
    "HSY",
    "HKH",
    "HSN",
    "HSP",
    "HYQ",
    "HIK",
    "HXZ",
    "HOY",
    "HCQ",
    "VAG",
    "JAL",
    "JBG",
    "JCF",
    "JJZ",
    "JCG",
    "JFF",
    "JGX",
    "JGG",
    "JHL",
    "RNH",
    "JBH",
    "JJG",
    "JLL",
    "JMN",
    "JMB",
    "JIK",
    "JAC",
    "JQJ",
    "JUH",
    "JIQ",
    "JTL",
    "JVJ",
    "JXB",
    "JRH",
    "JGJ",
    "JFW",
    "JZD",
    "JZT",
    "JKP",
    "KLR",
    "KFF",
    "KLV",
    "KLW",
    "KSR",
    "KNH",
    "KTR",
    "KYT",
    "UAH",
    "LBF",
    "UCH",
    "LCW",
    "LKZ",
    "LCN",
    "LCG",
    "UTP",
    "LDL",
    "LDQ",
    "LFV",
    "LGP",
    "LHC",
    "LON",
    "LWJ",
    "UHP",
    "LHM",
    "LQL",
    "LJL",
    "LHV",
    "LLG",
    "LKV",
    "UPP",
    "UMW",
    "LVV",
    "LST",
    "LWH",
    "LXJ",
    "LEQ",
    "UEP",
    "LYS",
    "LYQ",
    "LYF",
    "UKH",
    "LDF",
    "LVK",
    "LLF",
    "DHR",
    "LYD",
    "LYL",
    "LZX",
    "LZZ",
    "LZD",
    "MCN",
    "MDX",
    "MDB",
    "MRX",
    "MGH",
    "MHX",
    "MVX",
    "MDQ",
    "MMZ",
    "MSB",
    "MJT",
    "VAW",
    "MYW",
    "MOQ",
    "MLX",
    "NVH",
    "NGH",
    "NCB",
    "NCW",
    "NDZ",
    "NMP",
    "NFT",
    "NHX",
    "NGX",
    "NJW",
    "NPS",
    "NUH",
    "NFF",
    "NZX",
    "PEN",
    "PVD",
    "PIJ",
    "POJ",
    "PQP",
    "PSQ",
    "PXG",
    "PXZ",
    "PCW",
    "PRW",
    "QRN",
    "QSW",
    "QDK",
    "QYP",
    "QJM",
    "QNW",
    "QEB",
    "QHX",
    "QTB",
    "QVV",
    "QRS",
    "QYS",
    "QEH",
    "RAZ",
    "RQJ",
    "RJG",
    "RZK",
    "SCB",
    "SFB",
    "SGQ",
    "SHD",
    "SHB",
    "SFX",
    "SXT",
    "SLL",
    "SMS",
    "OMY",
    "SMF",
    "ONY",
    "NIW",
    "SPT",
    "SQF",
    "SRG",
    "SSQ",
    "OAH",
    "OTQ",
    "SWS",
    "OEP",
    "SEQ",
    "JUQ",
    "SYQ",
    "SNN",
    "SSB",
    "VYT",
    "SZH",
    "SZQ",
    "OXH",
    "SZN",
    "SUV",
    "OSQ",
    "TBQ",
    "TVX",
    "TGY",
    "TGP",
    "TXX",
    "THL",
    "TLX",
    "TFR",
    "TLD",
    "TLT",
    "TPT",
    "TML",
    "RDQ",
    "FUP",
    "TFT",
    "TAK",
    "TSP",
    "TSJ",
    "TYT",
    "TQT",
    "UTH",
    "TZW",
    "TAP",
    "WCB",
    "WCN",
    "WDT",
    "WKK",
    "WHH",
    "WXC",
    "WJT",
    "WLW",
    "WWT",
    "WNY",
    "WSM",
    "WIT",
    "WUJ",
    "WWJ",
    "WXH",
    "WXR",
    "WPB",
    "WAS",
    "WYY",
    "WYW",
    "WZZ",
    "RZH",
    "VRH",
    "ECW",
    "XCF",
    "ENW",
    "XFB",
    "XGV",
    "EUG",
    "XHY",
    "EFQ",
    "XLQ",
    "XTC",
    "EXP",
    "XKS",
    "XMS",
    "XBS",
    "XST",
    "ETW",
    "XTG",
    "XWM",
    "XXF",
    "XUN",
    "XYY",
    "XFN",
    "XYT",
    "VIH",
    "XRZ",
    "XUG",
    "XCH",
    "YWY",
    "YBW",
    "YWB",
    "YBD",
    "HAN",
    "YCW",
    "AFH",
    "YCN",
    "YNV",
    "YCB",
    "YCV",
    "YBP",
    "YCG",
    "YET",
    "YGW",
    "YIV",
    "YJL",
    "YKT",
    "YKX",
    "YNY",
    "YLZ",
    "ALY",
    "TWQ",
    "YPB",
    "YMR",
    "YAY",
    "YZW",
    "YPV",
    "YNP",
    "YYV",
    "YQB",
    "AQP",
    "NUW",
    "YNG",
    "AOP",
    "YRT",
    "YTG",
    "YAK",
    "YEX",
    "ATP",
    "YWH",
    "YON",
    "YXD",
    "AEQ",
    "YYQ",
    "YUQ",
    "AOQ",
    "YLH",
    "ZBK",
    "ZDV",
    "ZGW",
    "ZHQ",
    "ZIQ",
    "ZJZ",
    "ZJH",
    "DIQ",
    "ZKP",
    "ZMP",
    "ZKN",
    "ZLC",
    "ZTX",
    "ZDN",
    "ZVQ",
    "ZIT",
    "ZDW",
    "ZWJ",
    "ZYW",
    "ZIW",
    "ZEK",
    "ZZW",
    "ZZQ",
    "ZFK",
    "AAX",
    "ACB",
    "ADX",
    "ARW",
    "ADP",
    "ADO",
    "AGT",
    "YED",
    "AHP",
    "PKQ",
    "AJJ",
    "ARH",
    "AJB",
    "AJD",
    "PYW",
    "AER",
    "AYY",
    "ALD",
    "AUZ",
    "ASX",
    "ALN",
    "JTX",
    "AZM",
    "APH",
    "AXT",
    "ATV",
    "ASH",
    "ATR",
    "ATL",
    "AXS",
    "BWQ",
    "BPW",
    "BGV",
    "BMH",
    "BCR",
    "BUP",
    "BEP",
    "BDP",
    "BPP",
    "ILP",
    "BNN",
    "BGM",
    "BUT",
    "BIY",
    "BVC",
    "BWH",
    "BEY",
    "BJJ",
    "BJM",
    "IBQ",
    "BLQ",
    "BBM",
    "BSB",
    "BTD",
    "BKD",
    "BKB",
    "BAT",
    "BRZ",
    "BOR",
    "BQC",
    "BLX",
    "BNB",
    "BOZ",
    "BLB",
    "BLR",
    "BND",
    "AAP",
    "BMD",
    "BNM",
    "BMB",
    "BRP",
    "RPD",
    "BQP",
    "BQB",
    "BQL",
    "BAY",
    "BSY",
    "BPM",
    "BAL",
    "BUM",
    "FDC",
    "BTQ",
    "BZP",
    "BYP",
    "BHT",
    "BXK",
    "VXD",
    "BYC",
    "BYB",
    "BIV",
    "BAC",
    "BID",
    "BYT",
    "BNJ",
    "BCD",
    "IEW",
    "RMP",
    "BVP",
    "CIN",
    "CBC",
    "CEJ",
    "CCM",
    "CCP",
    "CID",
    "CAX",
    "CGT",
    "CEF",
    "CGV",
    "CGY",
    "CAJ",
    "CZB",
    "WBW",
    "CHB",
    "CHZ",
    "CKT",
    "CHP",
    "CIH",
    "CJT",
    "CJX",
    "CAM",
    "CJY",
    "CLK",
    "CYP",
    "CUQ",
    "CLP",
    "CLT",
    "CMB",
    "CNJ",
    "VBP",
    "DAQ",
    "CPM",
    "CQB",
    "CON",
    "CSB",
    "EFW",
    "CSP",
    "CST",
    "CSL",
    "CSC",
    "CVT",
    "CES",
    "CPT",
    "CQQ",
    "CIP",
    "CNZ",
    "CXQ",
    "CRP",
    "CFH",
    "CYK",
    "CAL",
    "CEK",
    "CEX",
    "CYL",
    "CDD",
    "CYD",
    "CYF",
    "CZL",
    "CUH",
    "ESH",
    "CXH",
    "CKQ",
    "CVK",
    "CFP",
    "CWM",
    "ICQ",
    "CBP",
    "DAG",
    "RAT",
    "DBJ",
    "DBC",
    "DBD",
    "RBT",
    "DYJ",
    "DBB",
    "RDT",
    "DGJ",
    "DVW",
    "DDB",
    "DKJ",
    "DRD",
    "DRX",
    "UFQ",
    "DGY",
    "DIL",
    "DMM",
    "DTT",
    "RGW",
    "DGP",
    "DHB",
    "DHP",
    "DQD",
    "SOQ",
    "DQH",
    "DXT",
    "DJT",
    "DKB",
    "DJL",
    "DKP",
    "RVD",
    "DHO",
    "DLC",
    "DLB",
    "DLD",
    "DIC",
    "DTX",
    "DLV",
    "DNC",
    "GZT",
    "DMD",
    "DEP",
    "DNF",
    "DNZ",
    "DPD",
    "RPP",
    "DPI",
    "DVT",
    "LFX",
    "DQX",
    "DML",
    "DQB",
    "MOH",
    "RHX",
    "DRQ",
    "DKH",
    "RWW",
    "DWT",
    "DPM",
    "DSL",
    "DYC",
    "RZT",
    "DBH",
    "DQK",
    "DGT",
    "DBM",
    "DTL",
    "RUH",
    "DNT",
    "DRJ",
    "DFJ",
    "DWJ",
    "DZZ",
    "DFM",
    "DXL",
    "DXX",
    "DSJ",
    "DXM",
    "DXG",
    "DKV",
    "DXV",
    "RXP",
    "DXD",
    "DYH",
    "DYW",
    "DYX",
    "DYN",
    "EXH",
    "IAW",
    "DBV",
    "DYV",
    "EWH",
    "RYV",
    "DYZ",
    "DJP",
    "DZD",
    "DTJ",
    "DIP",
    "DCH",
    "DVQ",
    "DNV",
    "DFZ",
    "DZV",
    "DWV",
    "ROP",
    "DXP",
    "DZY",
    "DAP",
    "RZP",
    "EBW",
    "RDP",
    "RDX",
    "EEC",
    "RLD",
    "ELA",
    "EMW",
    "RML",
    "RYJ",
    "ECN",
    "FAS",
    "FCG",
    "FNG",
    "FIH",
    "FEM",
    "FHX",
    "FHR",
    "FHT",
    "FEV",
    "FHH",
    "FIB",
    "FTT",
    "FLJ",
    "FTB",
    "FZB",
    "FNH",
    "AKH",
    "FNP",
    "FQS",
    "VMW",
    "FSJ",
    "FUQ",
    "FSV",
    "FST",
    "FKP",
    "FSZ",
    "FTX",
    "FYP",
    "FDY",
    "FXY",
    "FEY",
    "FXK",
    "FUH",
    "FAV",
    "FBT",
    "FYG",
    "FYM",
    "FYT",
    "FYX",
    "FBG",
    "FZY",
    "FZC",
    "VZK",
    "GFP",
    "VJW",
    "GBP",
    "GBD",
    "GDJ",
    "GCN",
    "GEP",
    "GCV",
    "GZB",
    "GRH",
    "GTW",
    "IDW",
    "GDV",
    "GGZ",
    "GVP",
    "GGT",
    "GGL",
    "GGJ",
    "GGP",
    "GAX",
    "GEX",
    "GDT",
    "GKT",
    "GLJ",
    "GEJ",
    "GFM",
    "GHT",
    "GLF",
    "VOW",
    "GLP",
    "GMK",
    "GMC",
    "GRT",
    "GNT",
    "GNM",
    "GPF",
    "GEY",
    "GAG",
    "GQD",
    "GQY",
    "GZD",
    "GST",
    "GSW",
    "GSP",
    "GSL",
    "GSD",
    "GXD",
    "GTJ",
    "GAY",
    "GTS",
    "GTP",
    "KEP",
    "GXG",
    "GYH",
    "GXF",
    "GIP",
    "GYF",
    "GAW",
    "GUJ",
    "GYL",
    "GYD",
    "GZS",
    "GNQ",
    "GEH",
    "GZY",
    "GZJ",
    "GSQ",
    "GXT",
    "GOT",
    "GSS",
    "GAT",
    "AMH",
    "HWN",
    "HIH",
    "VXN",
    "HBL",
    "HEB",
    "HAF",
    "XEG",
    "VCQ",
    "HCZ",
    "HCN",
    "HCT",
    "WKW",
    "HCJ",
    "HCP",
    "HXT",
    "HGC",
    "HDV",
    "HFR",
    "HFG",
    "HXJ",
    "HGP",
    "HYM",
    "IGW",
    "HHT",
    "VHD",
    "HUD",
    "HJJ",
    "HJR",
    "HFM",
    "HIM",
    "HJF",
    "HJV",
    "HJS",
    "HJT",
    "HDC",
    "HXP",
    "HJM",
    "HKJ",
    "KOH",
    "HKG",
    "HUB",
    "HPD",
    "HHB",
    "HIT",
    "HOB",
    "HIB",
    "ULY",
    "HRB",
    "VLB",
    "HAT",
    "HLL",
    "HIL",
    "HAX",
    "VTJ",
    "HLT",
    "VEH",
    "HYP",
    "HHL",
    "HNH",
    "HMJ",
    "VAQ",
    "HZM",
    "VQH",
    "HEY",
    "HRV",
    "HRN",
    "HDY",
    "HDL",
    "VSR",
    "VSB",
    "VSQ",
    "HSQ",
    "HOT",
    "VCH",
    "HHP",
    "HSJ",
    "HUT",
    "HSO",
    "HEQ",
    "VSJ",
    "HQB",
    "VTK",
    "VTR",
    "VTQ",
    "HZT",
    "HWK",
    "RWH",
    "VXB",
    "HYY",
    "VHB",
    "VTB",
    "HTJ",
    "VIX",
    "HAY",
    "HYK",
    "HVQ",
    "HUW",
    "HQY",
    "HGJ",
    "WHW",
    "VIQ",
    "HUN",
    "HNO",
    "HYJ",
    "VZH",
    "HZZ",
    "VON",
    "HZV",
    "VXQ",
    "JRT",
    "JIY",
    "JBD",
    "JEF",
    "JCJ",
    "JCK",
    "JNV",
    "JFD",
    "JDB",
    "JFP",
    "JOB",
    "UDH",
    "JST",
    "VGP",
    "JHP",
    "JHX",
    "JHB",
    "JHR",
    "JIR",
    "JHZ",
    "AJH",
    "VJD",
    "JJS",
    "JJB",
    "JJW",
    "JKT",
    "JLJ",
    "JMM",
    "JWQ",
    "JES",
    "JOK",
    "JNP",
    "JVS",
    "JPC",
    "JQX",
    "SSX",
    "EGH",
    "JSH",
    "JCN",
    "JRN",
    "JVV",
    "JSL",
    "JET",
    "JOP",
    "JIB",
    "EAH",
    "JTB",
    "JOM",
    "JTJ",
    "JNL",
    "JWX",
    "JUG",
    "JKK",
    "JUK",
    "JXV",
    "JXH",
    "JJP",
    "EPH",
    "JXT",
    "UEH",
    "JRQ",
    "JYS",
    "JYW",
    "JYK",
    "JYZ",
    "JYH",
    "JYJ",
    "SZL",
    "JYF",
    "JXJ",
    "JZK",
    "WEF",
    "JZH",
    "JEQ",
    "JBN",
    "JXK",
    "JXP",
    "JOD",
    "JOF",
    "JVP",
    "JYD",
    "KAT",
    "KCR",
    "KCP",
    "KDX",
    "KDT",
    "KOB",
    "KDC",
    "KAW",
    "KJB",
    "KQX",
    "KLC",
    "KHR",
    "KQL",
    "KSH",
    "KAB",
    "KSB",
    "KTT",
    "KXZ",
    "KAM",
    "KHX",
    "KXT",
    "KZP",
    "UBZ",
    "LLT",
    "LPF",
    "LUQ",
    "LCQ",
    "UCP",
    "UCK",
    "LCK",
    "LDY",
    "LRC",
    "LDO",
    "LDP",
    "LVP",
    "LVM",
    "LJP",
    "LOP",
    "LFP",
    "UFD",
    "LNB",
    "LGM",
    "LOM",
    "LGJ",
    "LGB",
    "UFH",
    "LXX",
    "LHX",
    "JID",
    "LNL",
    "KLH",
    "LHP",
    "UNP",
    "LEX",
    "LRT",
    "UDT",
    "LVT",
    "LKS",
    "UJH",
    "LJB",
    "LJW",
    "LJZ",
    "UJT",
    "LJX",
    "UJL",
    "LHB",
    "ULK",
    "LIJ",
    "LKF",
    "LKB",
    "LKQ",
    "LAX",
    "LAB",
    "LRM",
    "LLW",
    "LWQ",
    "LLB",
    "UWZ",
    "UAP",
    "LMX",
    "LMB",
    "LMJ",
    "UNG",
    "UQW",
    "LPM",
    "LPP",
    "UPJ",
    "LPG",
    "UQK",
    "UQJ",
    "UTW",
    "LUM",
    "UDQ",
    "LGT",
    "USP",
    "LIQ",
    "USH",
    "LRN",
    "LAF",
    "LMK",
    "LSV",
    "LUL",
    "LSG",
    "LBT",
    "LSD",
    "LAS",
    "LSB",
    "LET",
    "LTZ",
    "LAR",
    "LTP",
    "LBM",
    "LVZ",
    "LTJ",
    "VLJ",
    "LWK",
    "LRJ",
    "LNJ",
    "UXK",
    "LXB",
    "LXY",
    "LXQ",
    "LUG",
    "LXK",
    "LXC",
    "UXP",
    "LYY",
    "LYK",
    "LYT",
    "UYK",
    "LDD",
    "UIH",
    "LNF",
    "LXL",
    "LMH",
    "LVS",
    "LYX",
    "LAQ",
    "LYP",
    "LPQ",
    "LEJ",
    "LZT",
    "UAQ",
    "LIW",
    "LIZ",
    "LZS",
    "LZA",
    "LEM",
    "LQJ",
    "MAH",
    "MBY",
    "MGY",
    "MBN",
    "MCF",
    "MCL",
    "MAP",
    "MNF",
    "KPM",
    "MUQ",
    "MOB",
    "MDF",
    "MRB",
    "MGN",
    "MHL",
    "MHZ",
    "MGB",
    "MHQ",
    "MQQ",
    "MHB",
    "MLZ",
    "MLL",
    "MLD",
    "MLB",
    "MID",
    "MGM",
    "MUD",
    "MLQ",
    "MNR",
    "UGW",
    "MPQ",
    "MQB",
    "MQS",
    "MQF",
    "MUT",
    "MAB",
    "MSW",
    "MKW",
    "MOM",
    "MST",
    "MEB",
    "MVY",
    "MVQ",
    "MUP",
    "MMW",
    "MYS",
    "MUR",
    "MZJ",
    "MEY",
    "MFQ",
    "NAB",
    "NAT",
    "NBK",
    "NCK",
    "NSP",
    "NCZ",
    "NES",
    "NGP",
    "NFP",
    "NLT",
    "NNH",
    "NHH",
    "NHS",
    "NHJ",
    "NHD",
    "NVT",
    "NJS",
    "NJB",
    "NJD",
    "NKP",
    "NKT",
    "NNQ",
    "NLD",
    "NIR",
    "ULZ",
    "NLF",
    "NMD",
    "NMZ",
    "NMX",
    "NNS",
    "NPZ",
    "NQD",
    "NQO",
    "NQJ",
    "NTT",
    "NOQ",
    "NWV",
    "NWP",
    "NEH",
    "NXQ",
    "NXF",
    "NXT",
    "NUP",
    "NIP",
    "NAF",
    "NZT",
    "PAW",
    "PAL",
    "PNO",
    "PAJ",
    "PZT",
    "PEY",
    "PCY",
    "PDB",
    "PRP",
    "BFF",
    "PXJ",
    "PRT",
    "PFB",
    "PGL",
    "PGM",
    "PAM",
    "PGZ",
    "PHP",
    "PHM",
    "PHQ",
    "PBD",
    "PDP",
    "PKT",
    "PLT",
    "PNT",
    "PSB",
    "PSW",
    "PSR",
    "PSL",
    "PSV",
    "PHW",
    "PVT",
    "PTM",
    "PTS",
    "PTW",
    "PWT",
    "PWV",
    "PGV",
    "POW",
    "PWW",
    "PYX",
    "PYJ",
    "PYV",
    "PIK",
    "PPJ",
    "PYK",
    "PYP",
    "PZG",
    "PJH",
    "PZD",
    "POD",
    "PND",
    "QOT",
    "QAB",
    "QQP",
    "QRQ",
    "QDM",
    "QAK",
    "QFT",
    "QVP",
    "QFK",
    "QYQ",
    "QTP",
    "QUY",
    "QIP",
    "QHD",
    "QHP",
    "INH",
    "QJZ",
    "QJN",
    "QJB",
    "QJW",
    "QBT",
    "QNY",
    "QZV",
    "QLD",
    "QLY",
    "QLZ",
    "QIB",
    "QGH",
    "QIH",
    "QMP",
    "QSB",
    "QSN",
    "QXQ",
    "QUJ",
    "QYH",
    "QVH",
    "QAT",
    "QTJ",
    "QWD",
    "QWP",
    "QRW",
    "QXV",
    "QXP",
    "QXJ",
    "QUV",
    "QXC",
    "QOY",
    "QYF",
    "QYL",
    "QVQ",
    "QYJ",
    "QSJ",
    "QBQ",
    "QYT",
    "QDZ",
    "QRZ",
    "QZK",
    "RAH",
    "RCW",
    "RCG",
    "RBH",
    "RUQ",
    "RQP",
    "ROK",
    "RSZ",
    "RSD",
    "RXZ",
    "RVP",
    "RYF",
    "RHD",
    "ROF",
    "OBJ",
    "SBP",
    "AQW",
    "OBP",
    "ZWT",
    "SBB",
    "OCH",
    "SWN",
    "SCR",
    "SCS",
    "SMV",
    "SCP",
    "SCT",
    "SCL",
    "SDJ",
    "ORQ",
    "ODY",
    "SIL",
    "SXC",
    "SEP",
    "OUD",
    "OJQ",
    "OLH",
    "OFB",
    "STB",
    "OTW",
    "OKJ",
    "OGC",
    "SNQ",
    "SVK",
    "JBS",
    "SED",
    "SBM",
    "SHP",
    "SKT",
    "SHC",
    "VOP",
    "SSD",
    "SHL",
    "OXP",
    "OHD",
    "OZW",
    "SEL",
    "SZR",
    "SVP",
    "ODP",
    "SQH",
    "OJJ",
    "SJL",
    "SJB",
    "SUB",
    "OJB",
    "SML",
    "SAH",
    "SKD",
    "OLK",
    "IMH",
    "SRP",
    "SJJ",
    "SOZ",
    "SMM",
    "SJD",
    "OZL",
    "SHM",
    "SWT",
    "OMP",
    "SUR",
    "SHJ",
    "VLD",
    "SPB",
    "SLM",
    "ZJD",
    "SIB",
    "SOL",
    "LNM",
    "SLQ",
    "SLC",
    "SNT",
    "OLY",
    "SLP",
    "VFQ",
    "SCF",
    "OQH",
    "OMQ",
    "SXF",
    "SYP",
    "SOB",
    "SBZ",
    "PPT",
    "SON",
    "SFJ",
    "SQM",
    "SPF",
    "SID",
    "SXY",
    "SQT",
    "SRB",
    "SRL",
    "SQB",
    "SWB",
    "SSR",
    "SJQ",
    "OSK",
    "SAD",
    "SFT",
    "SAT",
    "SRD",
    "SST",
    "SSL",
    "MZQ",
    "SHX",
    "SDH",
    "OTB",
    "SEV",
    "SFM",
    "SWP",
    "SKB",
    "SXR",
    "OVH",
    "SXZ",
    "SAS",
    "SOH",
    "SXL",
    "SXM",
    "SXJ",
    "FMH",
    "SYB",
    "SYV",
    "OYP",
    "SYJ",
    "SPJ",
    "OEJ",
    "SOP",
    "OYD",
    "SYL",
    "BDH",
    "SAY",
    "SUD",
    "OYJ",
    "SAJ",
    "SND",
    "OHH",
    "SRH",
    "BJQ",
    "OZP",
    "OZY",
    "SZD",
    "SZB",
    "SNM",
    "SIN",
    "SEM",
    "KAH",
    "ITH",
    "TMK",
    "TID",
    "TAJ",
    "TBF",
    "TBB",
    "TTH",
    "TCX",
    "TZK",
    "TCL",
    "TCK",
    "TRQ",
    "TDZ",
    "TGL",
    "TGC",
    "TOL",
    "TGV",
    "THX",
    "THM",
    "THF",
    "THG",
    "TKH",
    "TIX",
    "TNJ",
    "TOT",
    "PDQ",
    "TZP",
    "TKX",
    "TMD",
    "TEX",
    "TJH",
    "TFZ",
    "TIZ",
    "TLB",
    "PXT",
    "QSL",
    "TMN",
    "TNN",
    "TLS",
    "TRC",
    "TCJ",
    "TVT",
    "TVW",
    "TIT",
    "TEB",
    "TQX",
    "TTK",
    "TQL",
    "TQJ",
    "TCT",
    "TAB",
    "TIM",
    "TUT",
    "THB",
    "TXJ",
    "TSW",
    "TCH",
    "TRZ",
    "TND",
    "TYF",
    "TIL",
    "TYJ",
    "TYB",
    "TYP",
    "TEK",
    "TZH",
    "TZJ",
    "TXK",
    "TZV",
    "TEW",
    "QWH",
    "WBP",
    "WAP",
    "WVP",
    "WUY",
    "WEW",
    "WCT",
    "WEQ",
    "WDB",
    "WRB",
    "WBK",
    "WDL",
    "WHP",
    "WNZ",
    "WVT",
    "WRN",
    "WDP",
    "WHX",
    "WFK",
    "WFB",
    "WUT",
    "WXT",
    "WGB",
    "WGY",
    "WGL",
    "WGM",
    "WVC",
    "WHB",
    "WHF",
    "WCJ",
    "WUB",
    "WAM",
    "WJP",
    "WJL",
    "WJJ",
    "WQB",
    "WKT",
    "WBT",
    "WLC",
    "WEB",
    "WVX",
    "VHH",
    "WLK",
    "WQC",
    "WSC",
    "WLX",
    "WBY",
    "WRX",
    "WNQ",
    "WWG",
    "WVY",
    "WNJ",
    "WPT",
    "WUP",
    "WQL",
    "WWP",
    "WSJ",
    "WEV",
    "WSP",
    "WTP",
    "WSV",
    "WZJ",
    "WVR",
    "WGH",
    "WVB",
    "WXV",
    "WVV",
    "IFH",
    "WXN",
    "WYZ",
    "WYB",
    "RYH",
    "WWB",
    "WIM",
    "WYC",
    "WZL",
    "WZY",
    "WZV",
    "WZB",
    "WQP",
    "WKD",
    "EAM",
    "XAZ",
    "XAF",
    "XAP",
    "EBP",
    "XLP",
    "ECH",
    "XCD",
    "XEM",
    "XRX",
    "XCB",
    "XCT",
    "EDW",
    "EJM",
    "XMP",
    "XEZ",
    "XOD",
    "EFG",
    "XFV",
    "XFW",
    "EGG",
    "XGN",
    "XUJ",
    "XIJ",
    "XGJ",
    "NBB",
    "XXB",
    "XIR",
    "XWJ",
    "EEP",
    "XAX",
    "XHB",
    "EHQ",
    "XHP",
    "XEC",
    "XYD",
    "XYP",
    "EKY",
    "XJB",
    "EJG",
    "XJV",
    "ENP",
    "XJM",
    "EKM",
    "XJT",
    "XTJ",
    "XMT",
    "EKB",
    "EAQ",
    "XNB",
    "XDD",
    "ELP",
    "XPX",
    "XLB",
    "XLJ",
    "XYB",
    "GCT",
    "XPH",
    "XLD",
    "XZB",
    "XGT",
    "XMD",
    "XMB",
    "XAT",
    "XNV",
    "XRN",
    "ENQ",
    "XNN",
    "XAW",
    "XPN",
    "XPY",
    "XPM",
    "XOS",
    "EPQ",
    "XIW",
    "XQB",
    "XQD",
    "XQJ",
    "XRL",
    "ESP",
    "XSB",
    "XZN",
    "XSV",
    "XSP",
    "XIZ",
    "XAM",
    "XOB",
    "XDT",
    "XSJ",
    "XTQ",
    "XTP",
    "XAN",
    "EIP",
    "XJQ",
    "EPD",
    "XWF",
    "XSN",
    "ENN",
    "XQY",
    "XXQ",
    "XIF",
    "XOV",
    "XXM",
    "XGQ",
    "XZC",
    "XXP",
    "XDB",
    "XUY",
    "XBY",
    "XWN",
    "SNZ",
    "XHM",
    "EEQ",
    "XFM",
    "XYX",
    "EXM",
    "EIF",
    "EJH",
    "EYB",
    "XZJ",
    "UUH",
    "XZX",
    "XRP",
    "XZT",
    "XXV",
    "XZD",
    "XRD",
    "ERP",
    "YAC",
    "YAX",
    "YAS",
    "YNB",
    "YBB",
    "YUD",
    "YAB",
    "YKM",
    "AIH",
    "YYB",
    "YER",
    "YKJ",
    "YYY",
    "YQQ",
    "YIN",
    "YHN",
    "YCK",
    "YEK",
    "YNF",
    "YAL",
    "YPK",
    "YAP",
    "ACP",
    "IXH",
    "YCT",
    "YDQ",
    "YDJ",
    "YDM",
    "YGS",
    "YGH",
    "YDG",
    "YAJ",
    "IIQ",
    "YYM",
    "YRB",
    "YOV",
    "YIK",
    "YOB",
    "EVH",
    "YHP",
    "AEP",
    "YHM",
    "URH",
    "YAM",
    "AEW",
    "YHG",
    "AJP",
    "YAT",
    "YGJ",
    "YJT",
    "YIR",
    "AFP",
    "AZK",
    "RFH",
    "YGT",
    "YJX",
    "YLW",
    "YSM",
    "YDY",
    "YLX",
    "YLB",
    "YSY",
    "ALW",
    "YLM",
    "YLD",
    "YQP",
    "YUM",
    "YMF",
    "YVV",
    "YXJ",
    "YMN",
    "YMM",
    "YST",
    "YNK",
    "YVM",
    "YNR",
    "YZJ",
    "ABM",
    "YPP",
    "UPH",
    "YSR",
    "AQK",
    "YQT",
    "YQV",
    "YGP",
    "YBF",
    "YSJ",
    "AUM",
    "YSF",
    "YUK",
    "YSV",
    "YVH",
    "ASP",
    "YSP",
    "YAD",
    "AIP",
    "YSX",
    "YUT",
    "YIP",
    "YTQ",
    "YTZ",
    "YSL",
    "YUX",
    "YWM",
    "YHW",
    "YOG",
    "ACG",
    "YXM",
    "YIG",
    "YYH",
    "AFW",
    "YIQ",
    "ARP",
    "YYL",
    "YYJ",
    "YZY",
    "UZH",
    "YSZ",
    "YZK",
    "YQM",
    "AEM",
    "YZD",
    "ZEY",
    "ZAD",
    "ZBP",
    "ZUP",
    "ZJJ",
    "ZCN",
    "ZHY",
    "ZQK",
    "ZIK",
    "ZCV",
    "ZHT",
    "ZDP",
    "ZDB",
    "ZFM",
    "ZGD",
    "ZGB",
    "ZHX",
    "VNH",
    "ZIN",
    "ZJY",
    "ZUB",
    "ZYP",
    "ZOB",
    "ZDH",
    "ZEH",
    "ZOD",
    "CWJ",
    "ZWQ",
    "ZUJ",
    "ZBW",
    "ZLV",
    "ZLT",
    "ZIV",
    "ZLD",
    "ZXX",
    "ZOQ",
    "ZGF",
    "ZDJ",
    "VNJ",
    "ZNJ",
    "ZPF",
    "ZPS",
    "ZPR",
    "ZVP",
    "ZQY",
    "ZTK",
    "ZRC",
    "ZLM",
    "ZGQ",
    "ZOG",
    "ZHD",
    "ZSQ",
    "ZSY",
    "ZSZ",
    "ZSG",
    "ZOP",
    "ZWB",
    "ZWD",
    "ZOY",
    "ZTN",
    "ZXS",
    "ZVT",
    "ZIP",
    "ZXC",
    "ZVY",
    "ZYN",
    "ZAW",
    "ZYJ",
    "ZUW",
    "GOS",
    "ZUS",
    "ZUX",
    "ZZY",
    "ZZM",
    "ZXP",
    "ZAL",
    "ZZC",
    "ZAQ",
    "XPF",
    "AQC",
    "ARX",
    "AUR",
    "ARG",
    "ASE",
    "AXL",
    "ADF",
    "BBZ",
    "BBE",
    "FWH",
    "BMP",
    "FEP",
    "FHP",
    "FCP",
    "BBY",
    "BRT",
    "BFQ",
    "BUB",
    "FZW",
    "BSN",
    "BGY",
    "NGQ",
    "BVT",
    "BXY",
    "UKZ",
    "FWP",
    "FHW",
    "FNC",
    "BDE",
    "BIK",
    "FOP",
    "CUY",
    "CBY",
    "VAT",
    "GUH",
    "KNW",
    "CVO",
    "FVH",
    "CNG",
    "FQQ",
    "CQJ",
    "COW",
    "CSE",
    "CBQ",
    "CTE",
    "CNS",
    "CWY",
    "CBH",
    "CXE",
    "CYN",
    "CNQ",
    "CWT",
    "DCZ",
    "RBZ",
    "DCJ",
    "RDD",
    "RWT",
    "DRB",
    "KRQ",
    "DNE",
    "RGT",
    "RMT",
    "RTQ",
    "UWQ",
    "NVQ",
    "FWQ",
    "DJE",
    "DIM",
    "DNY",
    "DSD",
    "DRH",
    "PRH",
    "DAL",
    "OWH",
    "DTO",
    "WWQ",
    "DNJ",
    "DWG",
    "IRQ",
    "DBN",
    "KJW",
    "DOK",
    "DYG",
    "DOP",
    "WZQ",
    "FQW",
    "IXW",
    "EGY",
    "EFN",
    "FBZ",
    "FDT",
    "FDZ",
    "PUH",
    "FUW",
    "FEW",
    "FLN",
    "FNM",
    "FUY",
    "FQE",
    "KCQ",
    "FAW",
    "FSL",
    "FOQ",
    "FZQ",
    "NZQ",
    "FBM",
    "FYB",
    "FDG",
    "FZG",
    "GCG",
    "VUW",
    "GAE",
    "GMP",
    "GCZ",
    "FMW",
    "GNN",
    "KIW",
    "GVW",
    "HGD",
    "GEM",
    "GLE",
    "GEZ",
    "IMQ",
    "FBQ",
    "GQT",
    "GXM",
    "GAZ",
    "GPT",
    "GUN",
    "GBS",
    "GPM",
    "GAJ",
    "STS",
    "KQW",
    "KEW",
    "GNP",
    "HNS",
    "HFF",
    "HKB",
    "SER",
    "HUL",
    "HPP",
    "KDQ",
    "HDJ",
    "HDO",
    "HTV",
    "HTB",
    "COH",
    "ENH",
    "KGN",
    "KAN",
    "HNN",
    "KXN",
    "HPB",
    "KAQ",
    "HCF",
    "KHN",
    "KHQ",
    "IHN",
    "FAQ",
    "HBM",
    "KLQ",
    "VLY",
    "KMQ",
    "IUQ",
    "HPV",
    "HNG",
    "HOH",
    "HVZ",
    "FBH",
    "HFV",
    "HPN",
    "KRN",
    "KSN",
    "NYH",
    "HLN",
    "VUR",
    "KNN",
    "KXQ",
    "HTY",
    "HEK",
    "IYN",
    "KXY",
    "HYT",
    "HWV",
    "KNQ",
    "JUL",
    "JAJ",
    "NSH",
    "PFQ",
    "JHD",
    "JOL",
    "JMP",
    "JLS",
    "JLF",
    "KJQ",
    "JVK",
    "JME",
    "JCS",
    "JJH",
    "OKH",
    "JUS",
    "JNJ",
    "JWH",
    "JSM",
    "JUN",
    "NRH",
    "JDV",
    "LOH",
    "JMZ",
    "JXG",
    "JBE",
    "JBJ",
    "JOW",
    "JTN",
    "JYL",
    "PYQ",
    "PYH",
    "JZV",
    "KBF",
    "QKW",
    "KLD",
    "KOM",
    "KTQ",
    "KVW",
    "IDZ",
    "UCZ",
    "GMH",
    "LCF",
    "NWW",
    "ILQ",
    "UUP",
    "VCZ",
    "LGK",
    "ACQ",
    "FVW",
    "LVO",
    "UOQ",
    "UQQ",
    "INW",
    "LLQ",
    "KFQ",
    "LQM",
    "LXV",
    "KGQ",
    "UDP",
    "LBN",
    "IKW",
    "UQZ",
    "LNK",
    "LUF",
    "COK",
    "KFW",
    "KBQ",
    "UKQ",
    "INJ",
    "LPE",
    "LGY",
    "UDV",
    "IVW",
    "LAG",
    "LDH",
    "KRW",
    "LBK",
    "LEH",
    "LUK",
    "LNR",
    "LSZ",
    "LZE",
    "LDJ",
    "OMH",
    "MHN",
    "MDN",
    "MNO",
    "MJN",
    "MLR",
    "MBJ",
    "MLM",
    "MSR",
    "MBK",
    "MBS",
    "MIF",
    "IUW",
    "MSN",
    "MXJ",
    "MYO",
    "KIQ",
    "MBM",
    "MZF",
    "MZM",
    "NBE",
    "NEF",
    "NCE",
    "NDG",
    "NXG",
    "NDJ",
    "NOJ",
    "NUT",
    "NFG",
    "NDN",
    "NKW",
    "FIW",
    "NDQ",
    "LLH",
    "NMO",
    "NFZ",
    "NXZ",
    "NBS",
    "NOY",
    "NCQ",
    "NYE",
    "NYF",
    "PAN",
    "PUE",
    "PBM",
    "PBE",
    "PCE",
    "PGW",
    "PAK",
    "PUT",
    "PNN",
    "PEQ",
    "PAZ",
    "PPW",
    "PUD",
    "PSK",
    "PBG",
    "PYF",
    "PDV",
    "PZM",
    "PAE",
    "PMW",
    "QGJ",
    "QFW",
    "QCE",
    "QHK",
    "QMQ",
    "QET",
    "QFB",
    "QBM",
    "QIM",
    "QEW",
    "QNB",
    "QEJ",
    "QVW",
    "QAY",
    "QSQ",
    "QSO",
    "QGV",
    "QBY",
    "QNC",
    "QWQ",
    "QNZ",
    "QZQ",
    "RUO",
    "RQW",
    "RCK",
    "RXG",
    "RIH",
    "RVW",
    "RKO",
    "RVQ",
    "SFF",
    "SDL",
    "FIQ",
    "KKW",
    "SUP",
    "NFQ",
    "SOK",
    "GQH",
    "AHQ",
    "SWZ",
    "OJT",
    "IPW",
    "SYM",
    "IXP",
    "IQW",
    "SHS",
    "SVM",
    "FMQ",
    "ONC",
    "SBN",
    "SQE",
    "SQN",
    "SMR",
    "NSQ",
    "ARQ",
    "KSQ",
    "RNQ",
    "INQ",
    "QHW",
    "STE",
    "OGQ",
    "NPH",
    "SLH",
    "SSH",
    "GPH",
    "IPQ",
    "MPH",
    "OYT",
    "OVQ",
    "OCT",
    "SNV",
    "SOT",
    "IOQ",
    "SRQ",
    "IFQ",
    "QQJ",
    "OSW",
    "TAD",
    "TOK",
    "TBZ",
    "TTN",
    "TIV",
    "THR",
    "TAM",
    "JYN",
    "TJN",
    "TEN",
    "TXL",
    "TJB",
    "KXH",
    "TAR",
    "TNS",
    "TNW",
    "TIJ",
    "TWJ",
    "KQQ",
    "THN",
    "TAZ",
    "TNV",
    "TST",
    "WGK",
    "WFG",
    "WBL",
    "WHK",
    "WPC",
    "WMT",
    "WFN",
    "WAR",
    "WET",
    "WSE",
    "IIH",
    "WAH",
    "WOV",
    "WDH",
    "WBS",
    "WCS",
    "WYG",
    "WEJ",
    "WZE",
    "WIF",
    "WBZ",
    "XDZ",
    "XVF",
    "ERN",
    "EWW",
    "XFT",
    "NQQ",
    "FVQ",
    "XTV",
    "XJN",
    "GDN",
    "WDQ",
    "EJQ",
    "EWQ",
    "IRW",
    "NKQ",
    "ITW",
    "XKN",
    "UNN",
    "EMQ",
    "EDQ",
    "EDP",
    "XWC",
    "EXF",
    "QSH",
    "EGF",
    "XBG",
    "XQF",
    "OYN",
    "XOY",
    "XWS",
    "EZF",
    "FNQ",
    "YFW",
    "RGH",
    "ABV",
    "WMW",
    "YEG",
    "AWW",
    "NAQ",
    "AOJ",
    "IXQ",
    "YBZ",
    "VTM",
    "GTH",
    "AJV",
    "RVH",
    "YKP",
    "YXL",
    "QUH",
    "YEF",
    "YAG",
    "YEY",
    "YMX",
    "YKQ",
    "KPQ",
    "ASY",
    "YCZ",
    "KZQ",
    "YGG",
    "CTQ",
    "YTS",
    "YKG",
    "YLK",
    "YTL",
    "YXS",
    "YBS",
    "YUH",
    "AXM",
    "YVK",
    "YZV",
    "YXG",
    "YXY",
    "CTH",
    "IZJ",
    "ZDS",
    "ZHP",
    "ZMN",
    "ZUT",
    "ZHW",
    "ZJE",
    "ZPQ",
    "IZW",
    "KKQ",
    "ZKE",
    "ZSN",
    "ZRQ",
    "ZLN",
    "ZCS",
    "FCQ",
    "ZQH",
    "KWQ",
    "ZAZ",
    "ZXJ",
    "FYW",
    "ZEJ",
    "WZW",
    "ZAP",
    "ZNK",
    "ZDC",
    "ZAF",
    "KVQ",
    "HVU",
    "CXW",
    "JXA"
]


def city2code(cityName):
    return CITY_CODE[CITY_NAME.index(cityName)]


def code2city(cityCode):
    return CITY_NAME[CITY_CODE.index(cityCode)]
class TicketDetails(object):
    #  车次：3
    @property
    def trainNo(self):
        return self._trainNo

    @trainNo.setter
    def trainNo(self, trainNo):
        self._trainNo = trainNo

    @property
    def fromStation(self):
        return self._fromStation

    @fromStation.setter
    def fromStation(self, value):
        self._fromStation = value

    @property
    def toStation(self):
        return self._toStation

    @toStation.setter
    def toStation(self, value):
        self._toStation = value

    @property
    def startStation(self):
        return self._startStation

    @startStation.setter
    def startStation(self, value):
        self._startStation = value

    @property
    def endStation(self):
        return self._endStation

    @endStation.setter
    def endStation(self, value):
        self._endStation = value

    #  start_station_code:起始站：4
    @property
    def startStationCode(self):
        return self._startStationCode;

    @startStationCode.setter
    def startStationCode(self, value):
        self._startStationCode = value

    #  end_station_code终点站：5
    @property
    def endStationCode(self):
        return self._endStationCode

    @endStationCode.setter
    def endStationCode(self, value):
        self._endStationCode = value

    #  from_station_code:出发站：6
    @property
    def fromStationCode(self):
        return self._fromStationCode

    @fromStationCode.setter
    def fromStationCode(self, value):
        self._fromStationCode = value

    #  to_station_code:到达站：7
    @property
    def toStationCode(self):
        return self._toStationCode

    @toStationCode.setter
    def toStationCode(self, value):
        self._toStationCode = value

    #  start_time:出发时间：8
    @property
    def leaveTime(self):
        return self._leaveTime

    @leaveTime.setter
    def leaveTime(self, value):
        self._leaveTime = value

    #  arrive_time:达到时间：9
    @property
    def arriveTime(self):
        return self._arriveTime

    @arriveTime.setter
    def arriveTime(self, value):
        self._arriveTime = value

    #  历时：10
    @property
    def totalConsume(self):
        return self._totalConsume

    @totalConsume.setter
    def totalConsume(self, value):
        self._totalConsume = value

    #  商务特等座：32
    @property
    def businessSeat(self):
        return self._businessSeat

    @businessSeat.setter
    def businessSeat(self, value):
        self._businessSeat = value

    #  一等座：31
    @property
    def firstClassSeat(self):
        return self._firstClassSeat

    @firstClassSeat.setter
    def firstClassSeat(self, value):
        self._firstClassSeat = value

    #  二等座：30
    @property
    def secondClassSeat(self):
        return self._secondClassSeat

    @secondClassSeat.setter
    def secondClassSeat(self, value):
        self._secondClassSeat = value

    #  高级软卧：21
    @property
    def advancedSoftSleep(self):
        return self._advancedSoftSleep

    @advancedSoftSleep.setter
    def advancedSoftSleep(self, value):
        self._advancedSoftSleep = value

    #  软卧：23
    @property
    def softSleep(self):
        return self._softSleep

    @softSleep.setter
    def softSleep(self, value):
        self._softSleep = value

    #  动卧：33
    @property
    def moveSleep(self):
        return self._moveSleep

    @moveSleep.setter
    def moveSleep(self, value):
        self._moveSleep = value

    #  硬卧：28
    @property
    def hardSleep(self):
        return self._hardSleep

    @hardSleep.setter
    def hardSleep(self, value):
        self._hardSleep = value

    #  软座：24
    @property
    def softSeat(self):
        return self._softSeat

    @softSeat.setter
    def softSeat(self, value):
        self._softSeat = value

    #  硬座：29
    @property
    def hardSeat(self):
        return self._hardSeat

    @hardSeat.setter
    def hardSeat(self, value):
        self._hardSeat = value

    #  无座：26
    @property
    def noSeat(self):
        return self._noSeat

    @noSeat.setter
    def noSeat(self, value):
        self._noSeat = value

    #  其他：22
    @property
    def other(self):
        return self._other

    @other.setter
    def other(self, value):
        self._other = value

    #  备注：1
    @property
    def mark(self):
        return self._mark

    @mark.setter
    def mark(self, value):
        self._mark = value

        #
        #  start_train_date:车票出发日期：13

    @property
    def passengerType(self):
        return self._passengerType

    @passengerType.setter
    def passengerType(self, value):
        self._passengerType = value

    @property
    def secretStr(self):
        return self._secretStr

    @secretStr.setter
    def secretStr(self, value):
        self._secretStr = value

    @property
    def startDate(self):
        return self._startDate

    @startDate.setter
    def startDate(self, value):
        self._startDate = value

    def __str__(self):
        return '[车次:%s,出发站:%s,到达站:%s,出发时间:%s,到达时间:%s]' % (self._trainNo, self._fromStation,
                                                          self._toStation, self._leaveTime, self._arriveTime)

    __repr__ = __str__

class SeatName(object):
    BUSINESS_SEAT = '商务座'
    SPECIAL_SEAT = '特等座'
    FIRST_CLASS_SEAT = '一等座'
    SECOND_CLASS_SEAT = '二等座'
    ADVANCED_SOFT_SLEEP = '高级软卧'
    SOFT_SLEEP = '软卧'
    HARD_SLEEP = '硬卧'
    SOFT_SEAT = '软座'
    HARD_SEAT = '硬座'
    NO_SEAT = '无座'
SEAT_TYPE = {
    SeatName.BUSINESS_SEAT: '9',
    SeatName.SPECIAL_SEAT: 'P',
    SeatName.FIRST_CLASS_SEAT: 'M',
    SeatName.SECOND_CLASS_SEAT: 'O',
    SeatName.ADVANCED_SOFT_SLEEP: '6',
    SeatName.SOFT_SLEEP: '4',
    SeatName.HARD_SLEEP: '3',
    SeatName.SOFT_SEAT: '2',
    SeatName.HARD_SEAT: '1',
    SeatName.NO_SEAT: '1',
}
#  车次：3
INDEX_TRAIN_NO = 3
#  start_station_code:起始站：4
INDEX_TRAIN_START_STATION_CODE = 4
#  end_station_code终点站：5
INDEX_TRAIN_END_STATION_CODE = 5
#  from_station_code:出发站：6
INDEX_TRAIN_FROM_STATION_CODE = 6
#  to_station_code:到达站：7
INDEX_TRAIN_TO_STATION_CODE = 7
#  start_time:出发时间：8
INDEX_TRAIN_LEAVE_TIME = 8
#  arrive_time:达到时间：9
INDEX_TRAIN_ARRIVE_TIME = 9
#  历时：10
INDEX_TRAIN_TOTAL_CONSUME = 10
#  商务特等座：32
INDEX_TRAIN_BUSINESS_SEAT = 32
#  一等座：31
INDEX_TRAIN_FIRST_CLASS_SEAT = 31
#  二等座：30
INDEX_TRAIN_SECOND_CLASS_SEAT = 30
#  高级软卧：21
INDEX_TRAIN_ADVANCED_SOFT_SLEEP = 21
#  软卧：23
INDEX_TRAIN_SOFT_SLEEP = 23
#  动卧：33
INDEX_TRAIN_MOVE_SLEEP = 33
#  硬卧：28
INDEX_TRAIN_HARD_SLEEP = 28
#  软座：24
INDEX_TRAIN_SOFT_SEAT = 24
#  硬座：29
INDEX_TRAIN_HARD_SEAT = 29
#  无座：26
INDEX_TRAIN_NO_SEAT = 28
#  其他：22
INDEX_TRAIN_OTHER = 22
#  备注：1
INDEX_TRAIN_MARK = 1

INDEX_SECRET_STR = 0

INDEX_START_DATE = 13  # 车票出发日期


#
#  start_train_date:车票出发日期：13



class Query(object):
    @staticmethod
    def query(trainDate, fromStation, toStation, cookie, passengerType=PASSENGER_TYPE_ADULT):
        params = {
            r'leftTicketDTO.train_date': trainDate,
            r'leftTicketDTO.from_station': city2code(fromStation),
            r'leftTicketDTO.to_station': city2code(toStation),
            r'purpose_codes': passengerType
        }
        head={
            'Cookie': cookie
        }
        # jsonRet = EasyHttp.send(queryUrls['query'], params=params)
        try:
            jsonRet = requests.get(url='https://kyfw.12306.cn/otn/leftTicket/queryZ',params=params,headers=head).json()
            # print(jsonRet)
            if jsonRet:
                return Query.__decode(jsonRet['data']['result'], passengerType)
        except Exception as e:
            print(f'报错{e}')
        return []

    @staticmethod
    def __decode(queryResults, passengerType):
        for queryResult in queryResults:
            info = queryResult.split('|')
            ticket = TicketDetails()
            ticket.passengerType = passengerType
            ticket.trainNo = info[INDEX_TRAIN_NO]
            ticket.startStationCode = info[INDEX_TRAIN_START_STATION_CODE]
            ticket.endStationCode = info[INDEX_TRAIN_END_STATION_CODE]
            ticket.fromStationCode = info[INDEX_TRAIN_FROM_STATION_CODE]
            ticket.toStationCode = info[INDEX_TRAIN_TO_STATION_CODE]
            ticket.leaveTime = info[INDEX_TRAIN_LEAVE_TIME]
            ticket.arriveTime = info[INDEX_TRAIN_ARRIVE_TIME]
            ticket.totalConsume = info[INDEX_TRAIN_TOTAL_CONSUME]
            ticket.businessSeat = info[INDEX_TRAIN_BUSINESS_SEAT]
            ticket.firstClassSeat = info[INDEX_TRAIN_FIRST_CLASS_SEAT]
            ticket.secondClassSeat = info[INDEX_TRAIN_SECOND_CLASS_SEAT]
            ticket.advancedSoftSleep = info[INDEX_TRAIN_ADVANCED_SOFT_SLEEP]
            ticket.softSleep = info[INDEX_TRAIN_SOFT_SLEEP]
            ticket.moveSleep = info[INDEX_TRAIN_MOVE_SLEEP]
            ticket.hardSleep = info[INDEX_TRAIN_HARD_SLEEP]
            ticket.softSeat = info[INDEX_TRAIN_SOFT_SEAT]
            ticket.hardSeat = info[INDEX_TRAIN_HARD_SEAT]
            ticket.noSeat = info[INDEX_TRAIN_NO_SEAT]
            ticket.other = info[INDEX_TRAIN_OTHER]
            ticket.mark = info[INDEX_TRAIN_MARK]
            ticket.startStation = code2city(ticket.startStationCode)
            ticket.endStation = code2city(ticket.endStationCode)
            ticket.fromStation = code2city(ticket.fromStationCode)
            ticket.toStation = code2city(ticket.toStationCode)
            ticket.secretStr = info[INDEX_SECRET_STR]
            ticket.startDate = info[INDEX_START_DATE]
            yield ticket

    @staticmethod
    def outputPretty(trainDate, fromStation, toStation, symbol, time, num,cookie, passengerType=PASSENGER_TYPE_ADULT,):
        table = PrettyTable()

        table.field_names = '车次 车站 时间 历时 商务特等座 一等座 二等座 高级软卧 软卧 动卧 硬卧 软座 硬座 无座 其他 备注'.split(sep=' ')
        for ticket in Query.query(trainDate, fromStation, toStation, cookie, passengerType):
            try:
                num = int(num)
            except Exception as e:
                print(f'报错{e}')
                break
            if not ticket:
                continue
            # print(ticket.leaveTime,ticket.secondClassSeat,type(ticket.secondClassSeat))
            if ticket.secondClassSeat == '无' or ticket.secondClassSeat == '':
                #过滤无和空
                continue

            if ticket.secondClassSeat == '有':
                pass

            elif int(ticket.secondClassSeat) < num :
                #过滤小于期望票数
                continue
            try:
                from datetime import datetime
                datetime.strptime(ticket.leaveTime, "%H:%M")
                datetime.strptime(time, "%H:%M")
            except Exception as e:
                print(f'报错{e}')
                break
            #过滤时间
            if symbol == '>':
                if ticket.leaveTime < time:
                    # print(f'{ticket.leaveTime}大于{time}')
                    continue
            if symbol == '<':
                if ticket.leaveTime > time:
                    # print(f'{ticket.leaveTime}小于{time}')
                    continue
            table.add_row([ticket.trainNo,
                           '\n'.join([Fore.GREEN + ticket.fromStation + Fore.RESET,
                                      Fore.RED + ticket.toStation + Fore.RESET]),
                           '\n'.join(
                               [Fore.GREEN + ticket.leaveTime + Fore.RESET,
                                Fore.RED + ticket.arriveTime + Fore.RESET]),
                           ticket.totalConsume,
                           ticket.businessSeat or '--',
                           ticket.firstClassSeat or '--',
                           ticket.secondClassSeat or '--',
                           ticket.advancedSoftSleep or '--',
                           ticket.softSleep or '--',
                           ticket.moveSleep or '--',
                           ticket.hardSleep or '--',
                           ticket.softSeat or '--',
                           ticket.hardSeat or '--',
                           ticket.noSeat or '--',
                           ticket.other or '--',
                           ticket.mark or '--']
                          )
        print(table)
        return table
def changshabowuguan(cookie):
    filtered_dates = []
    url = 'https://sapi.hnmuseum.com/api/ticket/calendar?p=wxmini'
    heard = {
        'Authorization': cookie,
        'Content-Type': 'application/x-www-form-urlencoded',
        'Host': 'sapi.hnmuseum.com',
        'Connection': 'keep-alive',
        'Accept': 'application/json',
        'xweb_xhr': '1',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/8391'
    }
    response = requests.get(url, headers=heard).json()
    print(response['msg'])
    if response['msg'] == '登录已失效，请重新登录':

        return response['msg']
    else:
        data = response['data']['yy_date']
        # print(response)
        from datetime import datetime
        for entry in data:
            t_date = entry['t_date']  # 获取日期
            tp_last_stock_sum = entry['tp_last_stock_sum']  # 获取tp_last_stock_sum
            tp_last_stock_sum_fee = entry['tp_last_stock_sum_fee']  # 获取tp_last_stock_sum_fee
            # print(t_date,tp_last_stock_sum,tp_last_stock_sum_fee)
            # 将日期字符串转换为日期对象
            date_obj = datetime.strptime(t_date, '%Y-%m-%d')

            # 判断日期是否大于10月1日，并且tp_last_stock_sum或tp_last_stock_sum_fee大于0
            if date_obj > datetime(date_obj.year, 10, 1) and (tp_last_stock_sum > 0 or tp_last_stock_sum_fee > 0):
                # print(t_date)  # 打印日期
                filtered_dates.append(t_date)
        return filtered_dates

if __name__ == "__main__":
    import random
    rand=round(random.uniform(0, 2), 2)
    print(f'等待{rand}秒后运行')
    time.sleep(rand)
    tielu = os.getenv("tielu")
    a = tielu.split(',')
    table = Query.outputPretty(a[0], a[1], a[2], a[3], a[4], a[5], a[6])
    if 'G' in str(table):
        send('查票',str(table))
    cook = os.getenv("bowuguancook")
    bowuguan = changshabowuguan(cook)
    print(bowuguan)
    if  bowuguan:
        send('长沙博物馆有票啦',bowuguan)




